home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / redakcyjne / programy / Recover My Files 4.5.2.608 / RecoverMyFiles-Setup.exe / {app} / RecoverMyFiles-Help.chm / ehlpdhtm.js < prev    next >
Text File  |  2009-11-19  |  132KB  |  4,563 lines

  1. ∩╗┐// Dynamic HTML JavaScript 
  2. // Copyright ∩┐╜ 1998-2009 Adobe Systems Incorporated. All rights reserved.
  3. // Version=8.0
  4.  
  5. // Warning:Do not modify this file. It is generated by Adobe RoboHelp∩┐╜ and changes will be overwritten.
  6.  
  7. //// Segment Begin -- (JavaScript 1.0)
  8.  
  9. /// Section Begin - General and relative topics(JavaScript 1.0)
  10.  
  11. //{{HH_SYMBOL_SECTION
  12. var HH_ChmFilename = "";
  13. var HH_WindowName = "";
  14. var HH_GlossaryFont = "";
  15. var HH_Glossary = "";
  16. var HH_Avenue = "";
  17. var HH_ActiveX = false;
  18. //}}HH_SYMBOL_SECTION
  19. HH_ChmFilename = "C:\\Users\\Graham\\GETDATA\\Help Files\\LOCAL OUTPUT\\RecoverMyFiles_v4.en.chm";
  20.  
  21. //Begin to support previous generic parameters
  22. //Get the information about the browser.
  23. var gstrBsAgent     = navigator.userAgent.toLowerCase();
  24. var gnBsVer               = parseInt(navigator.appVersion);
  25.  
  26. var gbBsOpera        = (gstrBsAgent.indexOf('opera') != -1);
  27. var gbBsKonqueror    = (gstrBsAgent.indexOf('konqueror') != -1);
  28. var gbBsSafari        = (gstrBsAgent.indexOf('safari') != -1);
  29. var gbBsIE          = (gstrBsAgent.indexOf('msie') != -1) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari;
  30. var gbBsNS          = (gstrBsAgent.indexOf('mozilla') != -1) && ((gstrBsAgent.indexOf('spoofer') == -1) && (gstrBsAgent.indexOf('compatible') == -1)) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari;
  31.  
  32. var gbBsMac            = (gstrBsAgent.indexOf('mac') != -1);
  33. var gbBsWindows        = ((gstrBsAgent.indexOf('win') != -1) || (gstrBsAgent.indexOf('16bit') != -1));
  34. var gbBsSunOS        = (gstrBsAgent.indexOf("sunos") != -1);
  35.  
  36. var gbBsIE3Before     = ((gbBsIE) && (gnBsVer <= 2));
  37. var gbBsNS3Before     = ((gbBsNS) && (gnBsVer <= 3));
  38.  
  39. var gbBsNS2            = ((gbBsNS) && (gnBsVer <= 2));
  40. var gbBsNS3            = ((gbBsNS) && (gnBsVer == 3));
  41. var gbBsIE300301    = ((gbBsIE) && (gnBsVer == 2) && ((gstrBsAgent.indexOf("3.00") != -1)||(gstrBsAgent.indexOf("3.0a") != -1)||(gstrBsAgent.indexOf("3.0b")!=-1)||(gstrBsAgent.indexOf("3.01")!=-1)));
  42. var gbBsIE302        = ((gbBsIE) && (gnBsVer == 2) && (gstrBsAgent.indexOf("3.02") != -1));
  43.  
  44. var gbBsNS4            = ((gbBsNS) && (gnBsVer >= 4));
  45. var gbBsNS6            = ((gbBsNS) && (gnBsVer >= 5));
  46. var    gbBsNS7            = false;
  47.  
  48. var gbBsIE4            = ((gbBsIE) && (gnBsVer >= 4));
  49. var gbBsIE5            = false;
  50. var gbBsIE55        = false;
  51. var gbBsIE7            = false;
  52.  
  53. var gbBsOpera6        = false;
  54. var gbBsOpera7        = false;
  55.  
  56. var gbBsKonqueror3    = false;
  57. var gbSafari3         = false ;
  58. var gbAIR            = (gstrBsAgent.indexOf('adobeair')!=-1);
  59. var gbChrome         = (gstrBsAgent.indexOf('chrome')!=-1);
  60.  
  61.  
  62.  
  63. gbBsIE = (navigator.appName.indexOf("Microsoft") != -1) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari;;
  64. if (gbBsIE)
  65. {
  66.     if (parseInt(navigator.appVersion) >= 4) {
  67.         gbBsIE4 = true;
  68.         if (gbBsIE4) {
  69.             var nPos = gstrBsAgent.indexOf("msie");
  70.             var strIEversion = gstrBsAgent.substring(nPos + 5);
  71.             var nVersion =  parseFloat(strIEversion);
  72.             if (nVersion >= 5)
  73.                 gbBsIE5 = true;
  74.             if (nVersion >= 5.5)
  75.             {
  76.                 if(nVersion >= 7)
  77.                     gbBsIE7 = true;
  78.                 gbBsIE55 = true;
  79.             }
  80.         }
  81.     }
  82. }
  83. if (gbBsNS6)
  84. {
  85.     var nPos=gstrBsAgent.indexOf("gecko");
  86.     if(nPos!=-1)
  87.     {
  88.         var nPos2=gstrBsAgent.indexOf("/", nPos);
  89.         if(nPos2!=-1)
  90.         {
  91.             var nVersion=parseFloat(gstrBsAgent.substring(nPos2+1));
  92.             if (nVersion>=20020823)
  93.                 gbBsNS7=true;
  94.         }
  95.     }    
  96. }
  97. if (gbBsOpera)
  98. {
  99.     var nPos = gstrBsAgent.indexOf("opera");
  100.     if(nPos!=-1)
  101.     {
  102.         var nVersion = parseFloat(gstrBsAgent.substring(nPos+6));
  103.         if (nVersion >= 6)
  104.         {
  105.             gbBsOpera6=true;
  106.             if (nVersion >=7)
  107.                 gbBsOpera7=true;    
  108.         }
  109.     }
  110. }
  111. if (gbBsKonqueror)
  112. {
  113.     var nPos = gstrBsAgent.indexOf("konqueror");
  114.     if(nPos!=-1)
  115.     {
  116.         var nVersion = parseFloat(gstrBsAgent.substring(nPos+10));
  117.         if (nVersion >= 3)
  118.         {
  119.             gbBsKonqueror3=true;
  120.         }
  121.     }
  122. }
  123.  
  124. if(gbBsSafari)
  125. {
  126.     var nPos = gstrBsAgent.indexOf("version/");
  127.     if(nPos!=-1)
  128.     {
  129.         var nVersion = parseFloat(gstrBsAgent.substring(nPos+8,nPos+9));
  130.         if (nVersion >= 3)
  131.         {
  132.             gbSafari3=true;
  133.         }
  134.     }
  135. }
  136.  
  137. if(gbChrome)
  138. {
  139.     //for the time being use same tests as safari
  140.     gbBsSafari     = true ;
  141.     gbSafari3    = true;
  142. }
  143.  
  144. function insertAdjacentHTML(obj, where, htmlStr)
  145. {
  146.     if (gbBsIE || gbBsOpera7)
  147.     {
  148.         obj.insertAdjacentHTML(where, htmlStr);
  149.     }
  150.     else if (gbBsNS6 || gbBsSafari)
  151.     {
  152.         var r = obj.ownerDocument.createRange();
  153.         r.setStartBefore(obj);
  154.         var    parsedHTML = r.createContextualFragment(htmlStr);
  155.         
  156.         switch (where){
  157.         case 'beforeBegin':
  158.             obj.parentNode.insertBefore(parsedHTML,obj);
  159.             break;
  160.         case 'afterBegin':
  161.             obj.insertBefore(parsedHTML,obj.firstChild);
  162.             break;
  163.         case 'beforeEnd':
  164.             obj.appendChild(parsedHTML);
  165.             break;
  166.         case 'afterEnd':
  167.             if (obj.nextSibling){
  168.             obj.parentNode.insertBefore(parsedHTML,obj.nextSibling);
  169.             } else {
  170.             obj.parentNode.appendChild(parsedHTML);
  171.             }
  172.             break;
  173.         }
  174.     }
  175. }
  176.  
  177.  
  178. function setAttribute(obj, attr, val)
  179. {
  180.     if (gbBsIE)
  181.         obj.setAttribute(attr,val);
  182.     else
  183.     {
  184.         if (obj.setAttribute)
  185.             obj.setAttribute(attr,val);
  186.         else
  187.             obj.setProperty(attr,val,null);
  188.     }       
  189. };
  190.  
  191. function getAttribute(obj, attr)
  192. {
  193.    if (gbBsIE)
  194.         return obj.getAttribute(attr);
  195.     else
  196.     {
  197.         if ((obj.getAttribute)&&(obj.getAttribute(attr)))
  198.             return obj.getAttribute(attr);      
  199.          else if ((obj.getPropertyValue)&&(obj.getPropertyValue(attr)))
  200.             return obj.getPropertyValue(attr) ;
  201.          else if ((obj.getPropertyCSSValue)&&(obj.getPropertyCSSValue(attr)))
  202.             return obj.getPropertyCSSValue(attr) ;
  203.          else
  204.             return null ;
  205.     }          
  206. };
  207.  
  208. // Utilities functions.
  209. function BsscHasExtJs()
  210. {
  211.     if( gbBsIE3Before || gbBsNS3Before)
  212.         return false;
  213.     return true;
  214. }
  215.  
  216. // Register event handler
  217. var gBsOnLoads             = new Array();    // An array holds all the onload event handler.
  218. var gBsOnClicks         = new Array();    // An array holds all the onClick event handler.
  219. var gBsOnUnLoads         = new Array();    // An array holds all the OnUnLoad event handler.
  220. var gBsOnMouseOvers     = new Array();    // An array holds all the OnMouseOver event handler.
  221. var gBsOnMouseOuts         = new Array();    // An array holds all the OnMouseOut event handler.
  222.  
  223. var gbOrignalOnMouseDown = null;
  224.  
  225. function BsscRegisterOnLoad(funcHandler)
  226. {
  227.     var nLength = gBsOnLoads.length;
  228.     gBsOnLoads[nLength] = funcHandler;
  229. }
  230.  
  231. function BsscRegisterOnClick(funcHandler)
  232. {
  233.     var nLength = gBsOnClicks.length;
  234.     gBsOnClicks[nLength] = funcHandler;
  235. }
  236.  
  237. function BsscRegisterOnUnLoad(funcHandler)
  238. {
  239.     var nLength = gBsOnUnLoads.length;
  240.     gBsOnUnLoads[nLength] = funcHandler;
  241. }
  242.  
  243. function BsscRegisterOnMouseOver(funcHandler)
  244. {
  245.     var nLength = gBsOnMouseOvers.length;
  246.     gBsOnMouseOvers[nLength] = funcHandler;
  247. }
  248.  
  249. function BsscRegisterOnMouseOut(funcHandler)
  250. {
  251.     var nLength = gBsOnMouseOuts.length;
  252.     gBsOnMouseOuts[nLength] = funcHandler;
  253. }
  254.  
  255. function BsGeneralOnLoad()
  256. {
  257.     if (!gbBsIE4 && !gbBsNS4)
  258.         return;
  259.  
  260.     // Make everything visible in navigator
  261. //    if (gbBsNS4) {
  262. //        // Make some special effects items visible
  263. //        var arr ;
  264. //        if (gbBsNS6)
  265. //            arr = document.getElementsByTagName('*');
  266. //        else
  267. //            arr = document.layers ;
  268. //        for (var iLayer = 0; iLayer < arr.length; iLayer++) {
  269. //            arr[iLayer].visibility = "visible";
  270. //            arr[iLayer].left = 0 + 'px';
  271. //        }
  272. //    }    
  273.     
  274. }
  275.  
  276. // If resize the netscape browser, need to reload it.
  277. function BsReDo()
  278. {
  279.   if (innerWidth != origWidth || innerHeight != origHeight)
  280.      location.reload();
  281. }
  282. // End of the local functions.
  283.  
  284. // The following functions are used by the html files.
  285. function BSSCOnLoad(event)
  286. {
  287.     if( !BsscHasExtJs() )
  288.         return;
  289.     for (var nElement = gBsOnLoads.length - 1; nElement >= 0; nElement--)
  290.         gBsOnLoads[nElement]();
  291. }
  292.  
  293. function BSSCOnClick(event)
  294. {
  295.     if (!BsscHasExtJs()) return;
  296.         
  297.     for (var nElement = gBsOnClicks.length - 1; nElement >= 0; nElement--)
  298.         gBsOnClicks[nElement]();
  299. }
  300.  
  301. function BSSCOnUnload(event)
  302. {
  303.     if (!BsscHasExtJs()) return;
  304.     for (var nElement = gBsOnUnLoads.length - 1; nElement >= 0; nElement--)
  305.         gBsOnUnLoads[nElement]();
  306. }
  307.  
  308. function BSSCOnMouseOver(event)
  309. {
  310.     if (!BsscHasExtJs()) return;
  311.     for (var nElement = gBsOnMouseOvers.length - 1; nElement >= 0; nElement--)
  312.         gBsOnMouseOvers[nElement]();
  313. }
  314.  
  315. function BSSCOnMouseOut(event)
  316. {
  317.     if (!BsscHasExtJs()) return;
  318.     for (var nElement = gBsOnMouseOuts.length - 1; nElement >= 0; nElement--)
  319.     {
  320.         gBsOnMouseOuts[nElement]();
  321.     }
  322. }
  323. // End of invocation of the event handle functions.
  324.  
  325. // Add the GereralOnLoad to the onload array.
  326. if (typeof(BsscRegisterOnLoad) != "undefined")
  327. {
  328.     BsscRegisterOnLoad(BsGeneralOnLoad);
  329. }
  330. if (gbBsNS4&&!gbBsNS6) {
  331.     origWidth = innerWidth;
  332.     origHeight = innerHeight;
  333.     onresize = BsReDo;
  334. }
  335. //End to support previous generic parameters
  336.  
  337. //Begin to support previous HHActiveX invoking
  338. function BsHHActivateComponents()
  339. {
  340.     if( HH_ActiveX && (HH_ChmFilename != "") && ((self == top) || (self == top.frames[0])))
  341.     {
  342.         var objBody = getElementsByTag(document,"BODY")[0];
  343.         if( typeof(objBody) == "object" )
  344.         {
  345.             insertAdjacentHTML(objBody, "beforeEnd", '<OBJECT ID="HHComponentActivator" CLASSID="CLSID:399CB6C4-7312-11D2-B4D9-00105A0422DF" width=0 height=0></OBJECT>');
  346.             if (HHComponentActivator.object)
  347.                 HHComponentActivator.Activate(HH_ChmFilename, HH_WindowName, HH_GlossaryFont, HH_Glossary, HH_Avenue);
  348.         }
  349.     }
  350. }
  351.  
  352. function BsHHActivXOnLoad()
  353. {    
  354.     if( gbBsIE4 )
  355.         BsHHActivateComponents(); 
  356. }
  357.  
  358. if( typeof(BsscRegisterOnLoad) != "undefined" )
  359. {
  360.     BsscRegisterOnLoad(BsHHActivXOnLoad);
  361. }
  362. //End to support previous HHActiveX invoking
  363.  
  364. //Begin to support previous relative topics
  365. //If webHelp needs Related Topics DHTMLcode, it's supposed to add it here
  366. var gbPopupMenuTimeoutExpired = false;
  367. var gbInPopupMenu = false;
  368. var gbPopupMenuTopicList = null;
  369. var gOlddocumentClick = null;
  370.  
  371. //////////////////////////////////////////////////////////////////////////////////////////
  372. //
  373. // Popup Menu code
  374. //
  375. //////////////////////////////////////////////////////////////////////////////////////////
  376.  
  377. var g_bIsPopupMenuInit = false;
  378. function _WritePopupMenuLayer()
  379. {
  380.     if (!g_bIsPopupMenuInit)
  381.         {
  382.       if (gbBsNS4&&!gbBsNS6) {
  383. //Do not try to write ininle styles for NS!  NS can not handle it and will not stop downloading the html page...
  384.            document.write("<DIV CLASS='WebHelpPopupMenu' ID='PopupMenu'></DIV>");
  385.       } else{
  386.       document.write("<DIV ID='PopupMenu' STYLE='position:absolute; left:0px; top:0px; z-index:4; visibility:hidden;'></DIV>");
  387.       if (!(gbBsNS4&&!gbBsNS6)) {
  388.         document.write("<STYLE TYPE='text/css'>");
  389.         if (gbBsMac&&gbBsIE4) {
  390.             document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:10pt; font-style:normal;font-weight:normal;text-decoration:none;}");
  391.             document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:10pt; font-style:normal;font-weight:normal;text-decoration:none;}");
  392.         } else {
  393.             document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:8pt; font-style:normal;font-weight:normal;text-decoration:none;}");
  394.             document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:8pt; font-style:normal;font-weight:normal;text-decoration:none;}");
  395.         }
  396.         document.write("</STYLE>");
  397.        }
  398.           }
  399.       g_bIsPopupMenuInit = true;
  400.     }
  401. }
  402.  
  403. //Seek for the bsscright frame 
  404. function _SeekFrameByName( cRoot, strName )
  405. {
  406.     if( cRoot == null )    return null;
  407.     if( cRoot.frames == null )    return null;
  408.     if( cRoot.frames[strName] != null )    return cRoot.frames[strName];
  409.     for (var i=0; i<cRoot.frames.length; i++)
  410.     {
  411.         var cObj = null;
  412.         if (!gbBsNS6) 
  413.             cObj = _SeekFrameByName( cRoot.frames(i).document, strName );
  414.         else
  415.             cObj = _SeekFrameByName( cRoot.frames[i], strName );
  416.         if( cObj != null )        return cObj;
  417.     };
  418.     return null;
  419. }
  420. function _GetFrameByName( cRoot, strName )
  421. {
  422.     if( cRoot == null )    return null;
  423.     var cRet = _SeekFrameByName(cRoot, strName);
  424.     if( cRet != null )    return cRet;
  425.     if (cRoot.parent != cRoot)
  426.         return _GetFrameByName( cRoot.parent, strName );
  427.     else
  428.         return null;
  429. }
  430.  
  431. var gfn_arguments = null;
  432. function _PopupMenu_Invoke(fn_arguments)
  433. {
  434.     gfn_arguments = fn_arguments;
  435.     if (gbBsOpera6&&gbBsMac)
  436.     {
  437.         var wndOldPopupLinks= window.open(document.location.href, "popuplinks");
  438.         wndOldPopupLinks.close();
  439.         setTimeout("_PopupMenu_Invoke_2();",100);
  440.     }
  441.     else
  442.     {
  443.         _PopupMenu_Invoke_2();
  444.     }
  445. }
  446.  
  447. function _PopupMenu_Invoke_2()
  448. {
  449.     var fn_arguments = gfn_arguments;
  450.     gfn_arguments = null;
  451.     
  452.     // Make sure we have reasonable arguments
  453.     var argLen = fn_arguments.length;
  454.     if (argLen < 3) {
  455.         return false;
  456.     }
  457.  
  458.     // Check to see if we only have one target
  459.     var strTarget = "";
  460.     var targetDoc = null;
  461.     if (fn_arguments[1] == '') {
  462.         if (BSSCPopup_IsPopup()) {
  463.             targetDoc = parent;
  464.             strTarget = "TARGET= _parent";
  465.         }
  466.         else
  467.             targetDoc = window.document;
  468.     } else {
  469.         targetDoc = _GetFrameByName( parent, fn_arguments[1] );
  470.  
  471.         strTarget = "TARGET='" + fn_arguments[1] + "'";
  472.     }
  473.  
  474.     if ((!gbBsIE4 && !gbBsNS4 && !gbBsOpera7 && !gbBsKonqueror3 &&!gbBsSafari) || ((gbBsMac) && (gbBsIE4) && (window.event.srcElement.tagName == "AREA"))) {
  475.     
  476.         var argLen     = fn_arguments.length;
  477.  
  478.         // Create the window that the hyperlinks will go into
  479.         var nHeight = argLen * 15;
  480.         var nWidth = 400;
  481.         var strParam = "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=auto";
  482.         strParam += ",height=" + nHeight + ",width=200";
  483.         strParam += ",resizable";
  484.  
  485.         var wndTemp=null;
  486.         // Create a temporary window first to ensure the real popup comes up on top
  487.         if (!gbBsOpera)
  488.             wndTemp = window.open("", "temp", strParam);
  489.  
  490.         // Create the real popup window
  491.         var wndPopupLinks=null;
  492.         if (gbBsOpera&&gbBsMac)
  493.         {
  494.             wndTemp = window.open(document.location.href, "temp", strParam);
  495.             wndPopupLinks= window.open(document.location.href, "popuplinks", strParam);
  496.         }
  497.         else
  498.             wndPopupLinks= window.open("", "popuplinks", strParam);
  499.         wndPopupLinks.document.open("text/html");
  500.  
  501.         // Close the temporary
  502.         if (wndTemp)
  503.             wndTemp.close();
  504.  
  505.         var sHTML="<html><head>";
  506.         sHTML += "<";
  507.         sHTML += "/head>";
  508.         sHTML+="<body onBlur=\'self.focus();\'>";
  509.         var strParaLine = "";
  510.         for (var i = 0; i < (argLen - 2) / 2; i++) {
  511.             strParaLine = "";
  512.             strParaLine += "<a href=\"javascript:";
  513.             if (gbBsIE) {
  514.                 strParaLine += "onBlur=null; ";
  515.             }
  516.             strParaLine += "opener.location=\'";
  517.             strParaLine += fn_arguments[2 * i + 3];
  518.             strParaLine += "\';close();\"";
  519.             strParaLine += strTarget;
  520.  
  521.             strParaLine += ">";
  522.             strParaLine += fn_arguments[2 * i + 2];
  523.             strParaLine += "</a>";
  524.             strParaLine += "<br>";
  525.             sHTML+=strParaLine;
  526.         }
  527.         sHTML+="</body></html>";
  528.         wndPopupLinks.document.write(sHTML);
  529.         wndPopupLinks.document.close();
  530.         window.gbInPopupMenu = true;
  531.         if (!gbBsIE) {
  532.             wndPopupLinks.focus();
  533.         }
  534.         return false;
  535.     }
  536.  
  537.     if (((argLen < 5) && ((isNaN(fn_arguments[2])) || (gbPopupMenuTopicList == null))) ||
  538.         ((argLen < 4) && ((!isNaN(fn_arguments[2])) && (gbPopupMenuTopicList != null)))) {
  539.         // Get the place that we will be putting the topic into
  540.         var strURL = "";
  541.         if (isNaN(fn_arguments[2]) ||  (gbPopupMenuTopicList == null)) {
  542.             strURL = fn_arguments[3];
  543.         }
  544.         else     {
  545.             strURL = gbPopupMenuTopicList[fn_arguments[2]].strURL;
  546.         }
  547.  
  548.         if (targetDoc != null) {
  549.             targetDoc.location.href = strURL;
  550.         }
  551.         else {
  552.             if (fn_arguments[1] != null && typeof(fn_arguments[1]) != "undefined")
  553.                 window.open(strURL, fn_arguments[1]);
  554.             else
  555.                 window.open(strURL);
  556.         }        
  557.         window.gbInPopupMenu = true;
  558.         return false;
  559.     }
  560.     
  561.     var strMenu = "";
  562.     if (gbBsNS4&&!gbBsNS6) {
  563.         strMenu = '<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=3 BGCOLOR="#c0c0c0">';
  564.     } else {
  565.         strMenu = '<TABLE STYLE="border:2px outset white;" CELLSPACING=0';
  566.         if (gbBsMac) {
  567.             strMenu += ' CELLPADDING=4';
  568.         } else {
  569.             strMenu += ' CELLPADDING=2';
  570.         }    
  571.         strMenu += ' BGCOLOR=#c0c0c0>';
  572.     }
  573.     // Add each of the items
  574.     var i = 2;
  575.     while (i <= argLen - 1) {
  576.         strMenu += '<TR><TD><NOBR>'
  577.         // If the destination is a number then look it up in the topic list
  578.         if (isNaN(fn_arguments[i]) ||  (gbPopupMenuTopicList == null)) {
  579.             strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A HREF="' + fn_arguments[i + 1] + '"' + strTarget;
  580.         } else {
  581.             strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A HREF="' + gbPopupMenuTopicList[fn_arguments[i]].strURL + '"' + strTarget;
  582.         }
  583.         strMenu += ' onclick="PopupMenu_HandleClick(event);"';
  584.         strMenu += ' onmouseover="PopupMenu_Over(event);"';
  585.         strMenu += ' onmouseout="PopupMenu_Out(event);"';
  586.         strMenu += '>';
  587.         if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) {
  588.             strMenu += '<SPAN CLASS="PopupNotOver">' + fn_arguments[i] + '</SPAN>';
  589.         } else {
  590.             strMenu += '<SPAN CLASS="PopupNotOver">' + gbPopupMenuTopicList[fn_arguments[i]].strTitle + '</SPAN>';
  591.         }
  592.         strMenu += '</A></DIV></NOBR></TD></TR>';
  593.  
  594.         if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) {
  595.             i += 2;
  596.         } else {
  597.             i += 1;
  598.         }
  599.     }
  600.     strMenu += "</TABLE>";
  601.  
  602.     if (gbBsMac) {
  603.     // totally hack. because ie5 in mac need something. </TABLE> is one of them. mac is mad.
  604.         strMenu +="<TABLE></TABLE>";
  605.     }
  606.  
  607.     var layerPopup = null;
  608.     var stylePopup = null;
  609.     var nEventX = 0;
  610.     var nEventY = 0;
  611.     var nWindowWidth = 0;
  612.     if (gbBsIE4 || gbBsOpera7) {
  613.  
  614.         layerPopup = getElement("PopupMenu");
  615.         layerPopup.innerHTML = strMenu;
  616.         stylePopup = layerPopup.style;
  617.  
  618.         _BSPSGetClientSize();
  619.  
  620.         // Get the position of the item causing the event (relative to its parent)
  621.         nEventX = window.event.clientX;
  622.         nEventY = window.event.clientY;
  623.  
  624.         if (nEventY + layerPopup.scrollHeight + 10 < gBsClientHeight) {
  625.             nEventY += getScrollTop() + 10;
  626.         } else {
  627.             nEventY = (getScrollTop() + gBsClientHeight) - layerPopup.scrollHeight - 20;
  628.         }
  629.         stylePopup.top = nEventY;
  630.         
  631.         var nPopupWidth = layerPopup.scrollWidth;
  632.         if (gbBsMac) {
  633.             nPopupWidth = 80; // we have no idea how to get the dynamic width of the popup.
  634.         }
  635.         if (nEventX + nPopupWidth + 20 > gBsClientWidth) {
  636.             if (gBsClientWidth - nPopupWidth < 5) {
  637.                 stylePopup.left = 5;
  638.             } else {
  639.                 stylePopup.left = gBsClientWidth - nPopupWidth - 5;
  640.             }
  641.         } else {
  642.             stylePopup.left = nEventX + getScrollLeft() + 20;
  643.         }
  644.  
  645.         stylePopup.visibility = "visible";
  646.         if (!gOlddocumentClick && document.onclick)
  647.             gOlddocumentClick = document.onclick;
  648.         document.onclick = PopupMenu_HandleClick;
  649.  
  650.     } else if (gbBsNS6 || gbBsKonqueror3||gbBsSafari) {
  651.         layerPopup = getElement("PopupMenu");
  652.         layerPopup.style.visibility = "hidden";
  653.     
  654.         if (gbBsNS6)
  655.         {
  656.             var e = fn_arguments[0];
  657.             nEventX = e.pageX;
  658.             nEventY = e.pageY;
  659.         }
  660.         else
  661.         {
  662.             nEventX = window.event.clientX;
  663.             nEventY = window.event.clientY;
  664.         }
  665.         _BSPSGetClientSize();
  666.         layerPopup.innerHTML = strMenu;
  667.  
  668.         if (nEventY + layerPopup.offsetHeight + 20  <  window.pageYOffset + gBsClientHeight) {
  669.             nEventY += 20;
  670.         } else {
  671.             nEventY = gBsClientHeight + window.pageYOffset - layerPopup.offsetHeight - 20;
  672.         }
  673.  
  674.         if (nEventX + layerPopup.offsetWidth + 20 > gBsClientWidth + window.pageXOffset) {
  675.             if (gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth < 20) {
  676.                 nEventX = 5;
  677.             } else {
  678.                 nEventX = gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth - 20;
  679.             }
  680.         } else {
  681.             nEventX += 20;
  682.         }
  683.         if (gbBsNS6 || gbChrome)
  684.             layerPopup.style.top = nEventY + "px";
  685.         else
  686.             layerPopup.style.top = nEventY;
  687.         if (gbBsNS6 || gbChrome)
  688.             layerPopup.style.left = nEventX + "px";
  689.         else
  690.             layerPopup.style.left = nEventX;
  691.         // set again to avoid the stupid frash in netscape 6.
  692.         layerPopup.innerHTML = strMenu;
  693.         layerPopup.style.visibility = "visible";
  694.         //window.captureEvents(Event.MOUSEDOWN);
  695.         if (!gOlddocumentClick && document.onclick)
  696.             gOlddocumentClick = document.onclick;
  697.         window.onclick = PopupMenu_HandleClick;
  698.     }
  699.     else if (gbBsNS4) {
  700.         layerPopup = document.layers.PopupMenu;
  701.         layerPopup.visibility = "hide";
  702.         stylePopup = layerPopup.document;
  703.         stylePopup.write(strMenu);
  704.         stylePopup.close();
  705.         var e = fn_arguments[0];
  706.         nEventX = e.pageX;
  707.         nEventY = e.pageY;
  708.         _BSPSGetClientSize();
  709.         if (nEventY + layerPopup.clip.height + 20 < window.pageYOffset + gBsClientHeight) {
  710.             nEventY += 20;
  711.         } else {
  712.             nEventY = gBsClientHeight + window.pageYOffset- layerPopup.clip.height - 20;
  713.         }
  714.         layerPopup.top = nEventY;
  715.  
  716.         if (nEventX + layerPopup.clip.width + 20 > gBsClientWidth + window.pageXOffset) {
  717.             if (gBsClientWidth + window.pageXOffset - layerPopup.clip.width < 20) {
  718.                 nEventX = 5;
  719.             } else {
  720.                 nEventX = gBsClientWidth + window.pageXOffset - layerPopup.clip.width - 20;
  721.             }
  722.         } else {
  723.             nEventX += 20;
  724.         }
  725.  
  726.         layerPopup.left = nEventX;
  727.  
  728.         layerPopup.visibility = "visible";
  729.  
  730.         window.captureEvents(Event.MOUSEDOWN);
  731.         if (!gOlddocumentClick && document.onmousedown)
  732.             gOlddocumentClick = document.onmousedown;
  733.         window.onmousedown = PopupMenu_HandleClick;
  734.     }
  735.  
  736.     window.gbInPopupMenu = true;
  737.     window.gbPopupMenuTimeoutExpired = false;
  738.     setTimeout("PopupMenu_Timeout();", 100);
  739.     return false;
  740. }
  741.  
  742. function PopupMenu_Timeout()
  743. {
  744.     window.gbPopupMenuTimeoutExpired = true;
  745. }
  746.  
  747. function PopupMenu_Over(e)
  748. {
  749.     if (gbBsIE4||gbBsOpera7)
  750.         e.srcElement.className = "PopupOver";
  751.     else if (gbBsNS6)
  752.         e.target.parentNode.className = "PopupOver";
  753.     return;
  754. }
  755.  
  756. function PopupMenu_Out(e)
  757. {
  758.     if (gbBsIE4||gbBsOpera7)
  759.         e.srcElement.className = "PopupNotOver";
  760.     else if (gbBsNS6)
  761.         e.target.parentNode.className = "PopupNotOver";
  762.     return;
  763. }
  764.  
  765. function PopupMenu_HandleClick(e)
  766. {
  767.     if (window.gbPopupMenuTimeoutExpired) {
  768.         window.gbInPopupMenu = false;
  769.         if (gbBsNS4 && !gbBsNS6) {
  770.             window.releaseEvents(Event.MOUSEDOWN);
  771.         }
  772.  
  773.         var layerPopup = null;
  774.         if (gbBsNS4&&!gbBsNS6) {
  775.             layerPopup = document.layers.PopupMenu;
  776.             layerPopup.visibility = "hide";
  777.         } else {
  778.             layerPopup = getElement("PopupMenu");
  779.             layerPopup.style.visibility = "hidden";
  780.         }
  781.     
  782.         if (gOlddocumentClick)
  783.         {
  784.             if (gbBsNS4 && !gbBsNS6)
  785.                 document.onmousedown = gOlddocumentClick;
  786.             else
  787.                 document.onclick = gOlddocumentClick;
  788.         }
  789.     }
  790.     return;
  791. }
  792.  
  793. function BSSCPopup_ClickMac()
  794. {
  795.     if ((!DHTMLPopupSupport()) && (gbBsIE4 || gbBsOpera7))
  796.     {    
  797.         var bClickOnAnchor = false;
  798.         var el;
  799.         if ((window.event != null) &&
  800.             (window.event.srcElement != null))
  801.         {
  802.             el = window.event.srcElement;
  803.             while (el != null)
  804.             {
  805.                 if ((el.tagName == "A") || (el.tagName == "AREA"))     {
  806.                     bClickOnAnchor = true;
  807.                     break;
  808.                 }
  809.                 if (el.tagName == "BODY") {
  810.                     break;
  811.                 }
  812.                 el = getParentNode(el);
  813.             }
  814.         }
  815.         if (BSSCPopup_IsPopup())
  816.         {
  817.             if (!bClickOnAnchor) {
  818.                 parent.window.gPopupWindow = null;
  819.                 self.close();
  820.             }
  821.         }
  822.         else
  823.         {
  824.             bClosePopupWindow = true;
  825.             if ((bClickOnAnchor) &&
  826.                 (el.href) &&
  827.                 ((el.href.indexOf("javascript:BSSCPopup") != -1) || (el.href.indexOf("javascript:null") != -1) || (el.href.indexOf("javascript:void(0)") != -1)))
  828.             {
  829.                 bClosePopupWindow = false;
  830.             }
  831.             if (bClosePopupWindow)
  832.             {
  833.                 if (window.gPopupWindow != null && !window.gPopupWindow.closed )
  834.                 {
  835.                     window.gPopupWindow.close();
  836.                 }
  837.             }
  838.         }
  839.     }
  840. }
  841.  
  842. function BsPopupOnClick()
  843. {
  844.     if (!gbBsIE4 && !gbBsOpera7)
  845.         return;
  846.  
  847.     BSSCPopup_ClickMac();
  848. }
  849.  
  850. function _BSSCOnError(message)
  851. {
  852.     if(-1 != message.indexOf("denied") 
  853.         || -1 != message.indexOf("Object required"))
  854.      return true;
  855. }
  856.  
  857. //End to support previous relative topics
  858.  
  859. /// Section End - General and relative topics (JavaScript 1.0)
  860.  
  861. /// Section Begin  - Popup (JavaScript 1.0)
  862. //Begin to support previous popup functions
  863.  
  864. //variables used to isolate the browser type
  865. var gBsStyVisShow    = null;
  866. var gBsStyVisHide    = null;
  867. var gBsClientWidth    = 640;
  868. var gBsClientHeight = 480;
  869.  
  870. // here is the varible for judge popup windows size. these parameter is for IE5.0, it may need adjust for others.
  871. var gBRateH_W        = 0.618; // 1.618 Golden cut.
  872. var gBMaxXOfParent    = 0.8; 
  873. var gBMaxYOfParent    = 0.8;
  874. var gBscrollHeight   = 16;
  875. var gBscrollWidth   =  16;
  876. var gBpermitXDelta    = 3;
  877. var gBpermitYDelta    = 3;
  878.  
  879.  
  880. var arrayPopupURL = new Array();
  881. var arrayAbsPopupURL = new Array();
  882. var arrayIntervalId = new Array();
  883.  
  884. var arrayDirty = new Array();
  885.  
  886. function getBRateH_W()
  887. {
  888.     return 0.618 ;
  889. }
  890.  
  891. function getBscrollWidth()
  892. {
  893.     return 16 ;
  894. }
  895.  
  896. function getBscrollHeight()
  897. {
  898.     return 16 ;
  899. }
  900.  
  901. function getBMaxXOfParent()
  902. {
  903.     return 0.8 ;
  904. }
  905.  
  906. function getBMaxYOfParent()
  907. {
  908.     return 0.8 ;
  909. }
  910.  
  911. function setIntervalID(nIndex,id)
  912. {
  913.     arrayIntervalId[nIndex] = id;
  914. }
  915.  
  916. function getIntervalID(nIndex)
  917. {
  918.     if (nIndex == -1 || arrayIntervalId.length <= nIndex) 
  919.         return -1;
  920.     else
  921.         return arrayIntervalId[nIndex];
  922. }
  923.  
  924. function setAbsPopupURL(nIndex, strURL)
  925. {
  926.     arrayAbsPopupURL[nIndex] = strURL;
  927. }
  928.  
  929. function getAbsPopupURL(nIndex)
  930. {
  931.     if (nIndex == -1 || arrayAbsPopupURL.length <= nIndex) return null;
  932.     else 
  933.         return arrayAbsPopupURL[nIndex];
  934. }
  935.  
  936. function getPopupURL(nIndex)
  937. {
  938.     if (nIndex == -1 || arrayPopupURL.length <= nIndex) return null;
  939.     else 
  940.         return arrayPopupURL[nIndex];
  941. }
  942.  
  943. function getPopupID(nIndex)
  944. {
  945.     return gstrPopupID + nIndex;
  946. }
  947.  
  948. function getPopupShadowID(nIndex)
  949. {
  950.     return gstrPopupShadowID + nIndex;
  951. }
  952.  
  953. function getPopupTopicID(nIndex)
  954. {
  955.     return gstrPopupTopicID + nIndex;
  956. }
  957.  
  958. function getPopupIFrameID(nIndex)
  959. {
  960.     return gstrPopupIFrameID + nIndex;
  961. }
  962.  
  963. function getPopupIFrameName(nIndex)
  964. {
  965.     return gstrPopupIFrameName + nIndex;
  966. }
  967.  
  968.  
  969. function getPopupTopicStyle(nIndex)
  970. {
  971.     return getElement(getPopupTopicID(nIndex)).style;
  972. }
  973.  
  974. function getPopupShadowStyle(nIndex)
  975. {
  976.     return getElement(getPopupShadowID(nIndex)).style;
  977. }
  978.  
  979. function getPopupIFrame(nIndex)
  980. {
  981.     if(gbAIR)
  982.     {
  983.         return window.frames[getPopupIFrameName(nIndex)];
  984.     }
  985.     else
  986.     {
  987.         if (gbBsNS6||gbSafari3)
  988.             return eval("window.frames['" + getPopupIFrameName(nIndex) + "']");
  989.         else
  990.             return eval("document.frames['" + getPopupIFrameName(nIndex) + "']");
  991.     }
  992. }
  993.  
  994. function getPopupDivStyle(nIndex)
  995. {
  996.     return getElement(getPopupID(nIndex)).style;
  997. }
  998.  
  999. function getPopupIFrameStyle(nIndex)
  1000. {
  1001.     return getElement(getPopupIFrameID(nIndex)).style;
  1002. }
  1003.  
  1004.  
  1005. function findDiv(strURL)
  1006. {
  1007.     for (var i = 0; i < arrayPopupURL.length; i ++ ) {
  1008.         if (arrayPopupURL[i] == strURL) {
  1009.             return i;
  1010.         }
  1011.     }
  1012.     return -1;
  1013. }
  1014.  
  1015. var gnToken = -1;
  1016. function takeToken()
  1017. {
  1018.     gnToken ++;
  1019.     if (gnToken > 10000) gnToken = 0;
  1020.     return gnToken;
  1021. }
  1022.  
  1023. function IsValidToken(nToken)
  1024. {
  1025.     return (gnToken == nToken);
  1026. }
  1027.  
  1028. function addDiv(strURL)
  1029. {
  1030.     for (var i = 0; i < arrayPopupURL.length; i ++) {
  1031.         if (arrayPopupURL[i] == null) {
  1032.             arrayPopupURL[i] = strURL;
  1033.             return i;
  1034.         }
  1035.     }    
  1036.     arrayPopupURL[i] = strURL;
  1037.     arrayDirty[i] = true;
  1038.     return i;
  1039. }
  1040.  
  1041. function setDirty()
  1042. {
  1043.     for (var i = 0; i < arrayPopupURL.length; i ++ )
  1044.         arrayDirty[i] = true;
  1045. }
  1046.  
  1047. function IsDirty(nIndex)
  1048. {
  1049.     if (nIndex == -1)
  1050.         return true;
  1051.     else 
  1052.         if (arrayDirty.length > nIndex) 
  1053.             return arrayDirty[nIndex];
  1054.         else
  1055.             return true;
  1056. }
  1057.  
  1058. function hideAll()
  1059. {
  1060.     for (var i = 0; i < arrayPopupURL.length; i ++ )
  1061.     {
  1062.         getPopupDivStyle(i).visibility = gBsStyVisHide;
  1063.         getPopupIFrameStyle(i).visibility = gBsStyVisHide;
  1064.         if(gbBsIE)
  1065.             removeThis(document.all(getPopupID(i)));
  1066.     }
  1067.     if(gbBsIE)
  1068.         arrayPopupURL.length = 0;
  1069. }
  1070.  
  1071. function getCurrentPopupIFrame()
  1072. {
  1073.     for (var i = 0; i < arrayPopupURL.length; i ++)
  1074.         if (getPopupDivStyle(i).visibility == gBsStyVisShow)
  1075.             return getPopupIFrame(i);
  1076.     return null;
  1077. }
  1078.  
  1079. function setClear(nIndex)
  1080. {
  1081.     if (nIndex != -1)
  1082.         arrayDirty[nIndex] = false;
  1083. }
  1084.  
  1085. function _BSSCCreatePopupDiv(strURL)
  1086. {
  1087.     var nIndex = findDiv(strURL);
  1088.     if (nIndex == -1 ) {
  1089.         nIndex = addDiv(strURL);
  1090.         BsPopup_CreateDiv(nIndex);
  1091.     }
  1092.     else {
  1093.         if (IsDirty(nIndex)) {
  1094.             if("object" == typeof(getPopupIFrame(nIndex).document))
  1095.                 getPopupIFrame(nIndex).document.location.href = strURL;
  1096.         }
  1097.     }
  1098.     return nIndex;
  1099. }
  1100.  
  1101. //Here is the browser type 
  1102. function _BSPSGetBrowserInfo()
  1103. {
  1104.     if (gbBsNS4&&!gbBsNS6)
  1105.     {
  1106.         gBsStyVisShow    = "show";
  1107.         gBsStyVisHide    = "hide";
  1108.     }
  1109.     else
  1110.     {
  1111.         gBsStyVisShow    = "visible";
  1112.         gBsStyVisHide    = "hidden";
  1113.     }
  1114. }
  1115.  
  1116. _BSPSGetBrowserInfo();
  1117.  
  1118. //Get client size info
  1119. function _BSPSGetClientSize()
  1120. {
  1121.     if (gbBsNS4||gbBsKonqueror3||gbBsSafari)
  1122.     {
  1123.         gBsClientWidth    = innerWidth;
  1124.         gBsClientHeight = innerHeight;
  1125.     }
  1126.     else if (gbBsIE4 || gbBsOpera7)
  1127.     {
  1128.         gBsClientWidth    = document.body.clientWidth;
  1129.         gBsClientHeight = document.body.clientHeight;
  1130.  
  1131.         if(document.documentElement.clientWidth > document.body.clientWidth) 
  1132.             gBsClientWidth    = document.documentElement.clientWidth;
  1133.  
  1134.         if(document.documentElement.clientHeight > document.body.clientHeight) 
  1135.             gBsClientHeight = document.documentElement.clientHeight;
  1136.     }
  1137. }
  1138.  
  1139. var gstrPopupID = 'BSSCPopup';
  1140. var gstrPopupShadowID = 'BSSCPopupShadow';
  1141. var gstrPopupTopicID = 'BSSCPopupTopic';
  1142. var gstrPopupIFrameID = 'BSSCPopupIFrame';
  1143. var gstrPopupIFrameName = 'BSSCPopupIFrameName';
  1144.  
  1145. var gstrPopupSecondWindowName = 'BSSCPopup';
  1146.  
  1147. var gPopupWindow = null;
  1148. var gnPopupClickX = 0;
  1149. var gnPopupClickY = 0;
  1150.  
  1151. var gnPopupScreenClickX = 0;
  1152. var gnPopupScreenClickY = 0;
  1153.  
  1154. var gbPopupTimeoutExpired = false;
  1155.  
  1156. function DHTMLPopupSupport()
  1157. {
  1158.     if (((gbBsIE4) && (!gbBsMac))||gbBsOpera7|| gbBsNS7 || gbSafari3||gbAIR) {
  1159.         return true;
  1160.     }
  1161.     return false;
  1162. }
  1163.  
  1164. function BSSCPopup_IsPopup()
  1165. {
  1166.     if (DHTMLPopupSupport() && (this.name.indexOf(gstrPopupIFrameName) != -1)) {
  1167.         return true;
  1168.     } else if ((gbBsNS4 || gbBsIE4 || gbBsOpera7) && (this.name.indexOf(gstrPopupID) != -1)) {
  1169.         return true;
  1170.     } else {
  1171.         return false;
  1172.     }
  1173. }
  1174.  
  1175. // If there is a hyperlink in a popup window, display the hyperlink in
  1176. // the original window. (bsscright)
  1177. if (BSSCPopup_IsPopup() && !gbBsIE4 && !gbBsOpera7) {
  1178.     document.write("<base target=\"bsscright\">");
  1179. }
  1180.  
  1181. // Local functions.
  1182. function BsPopup_CreateDiv(nIndex)
  1183. {
  1184.     if(!DHTMLPopupSupport())
  1185.         return;
  1186.     // DO NOT SET Width and height for the div, otherwize it will make IE4 popup do not work when view the topic alone.
  1187.     var strPopupDiv = "<DIV ID='" + getPopupID(nIndex) + "' STYLE='position:absolute; top:-100; left:0; z-index:600; visibility:hidden;'>";
  1188.     strPopupDiv += "<DIV ID='" + getPopupShadowID(nIndex) + "' STYLE=\"position:absolute;top:0; left:0;  background-color:#C0C0C0;\"></DIV>";
  1189.     strPopupDiv += "<DIV ID='" + getPopupTopicID(nIndex) + "' STYLE=\"position:absolute;top:0; left:0;  background-color:#FFFFFF;border:1px #000000 outset;\">";
  1190.     strPopupDiv += "<IFRAME title=\"Popup Window\" ID='" + getPopupIFrameID(nIndex) + "' name='" + getPopupIFrameName(nIndex) + "' src = '" + getPopupURL(nIndex) + "' frameborder=0 scrolling=auto></IFRAME>";
  1191.     strPopupDiv += "</DIV></DIV>";
  1192.  
  1193.     var objBody = getElementsByTag(document, "BODY")[0];
  1194.     if( typeof(objBody) != "object" )
  1195.         return;
  1196.  
  1197.     insertAdjacentHTML(objBody, "beforeEnd", strPopupDiv);
  1198. }
  1199.  
  1200. function handleLoadNS()
  1201. {
  1202.     if (this.id)
  1203.     {
  1204.         var nIndex = parseInt(this.id.substring(gstrPopupIFrameID.length));
  1205.         BSSCPopup_PostWork(nIndex);
  1206.     }
  1207. }
  1208.  
  1209. function BSSCPopup_PostWork(nIndex)
  1210. {
  1211.     getPopupDivStyle(nIndex).visibility = gBsStyVisShow;
  1212.     getPopupIFrameStyle(nIndex).visibility =gBsStyVisShow;
  1213.  
  1214.     setClear(nIndex);
  1215.     window.gbPopupTimeoutExpired = true;
  1216.  
  1217.     BSSCPopup_ChangeTargettoParent(getPopupIFrame(nIndex).document);
  1218.     if (gbBsNS6)
  1219.         getPopupIFrame(nIndex).document.body.addEventListener("click",BSSCPopupClicked,false);
  1220.     else
  1221.         getPopupIFrame(nIndex).document.body.onclick = BSSCPopupClicked;
  1222.  
  1223.     if (!gbOrignalOnMouseDown && document.onmousedown)
  1224.         gbOrignalOnMouseDown = document.onmousedown;
  1225.  
  1226.     if (gbBsNS6)
  1227.         document.addEventListener("mousedown", BSSCPopupParentClicked,false);
  1228.     else
  1229.         document.onmousedown = BSSCPopupParentClicked;
  1230. }
  1231.  
  1232. function BSSCPopup_Timeout(nIndex, nToken)
  1233. {
  1234.     if (!IsValidToken(nToken)) return;
  1235.  
  1236.     if (gbBsNS6||((getPopupIFrame(nIndex).document.readyState == "complete") &&
  1237.         (getPopupIFrame(nIndex).document.body != null))) {
  1238.         BSSCPopup_PostWork(nIndex);
  1239.     } else {
  1240.         setTimeout("BSSCPopup_Timeout(" + nIndex + "," + nToken + ")", 100);
  1241.     }
  1242. }
  1243.  
  1244. // VH 08/10/00 
  1245. // do not change target to parent if the href is using javascript
  1246. function BSSCPopup_ChangeTargettoParent(tagsObject)
  1247. {
  1248.     var collA = getElementsByTag(tagsObject, "A");
  1249.     BSSCPopup_ChangeTargettoParent2(collA);
  1250.  
  1251.     var collIMG = getElementsByTag(tagsObject,"IMG");
  1252.     BSSCPopup_ChangeTargettoParent2(collIMG);
  1253. }
  1254.  
  1255. function BSSCPopup_ChangeTargettoParent2(colls)
  1256. {
  1257.     if (colls != null)  {
  1258.         for (var j = 0; j < colls.length; j ++ )
  1259.         {
  1260.             var strtemp = colls[j].href;
  1261.             if (strtemp)
  1262.             {
  1263.                 strtemp = strtemp.toLowerCase();
  1264.                 if (strtemp.indexOf("javascript:") == -1)
  1265.                 if (colls[j].target == "")
  1266.                     colls[j].target = "_parent";
  1267.             }
  1268.         }
  1269.     }
  1270. }
  1271.  
  1272. function BSPSPopupTopicWinHelp(strURL)
  1273. {
  1274.     _BSSCPopup(strURL);
  1275.     return;
  1276. }
  1277.  
  1278. function DelayBSSCPopup_AfterLoad(nIndex ,nToken ,cuswidth ,cusheight )
  1279. {
  1280. //before doing any thing clear the interval function
  1281.     var intervalID = getIntervalID(nIndex);
  1282.     if(intervalID!=-1)
  1283.         clearInterval(intervalID);
  1284.         
  1285.     BSSCPopup_AfterLoad(nIndex ,nToken ,cuswidth ,cusheight );
  1286. }
  1287.  
  1288. function _BSSCPopup(strURL, width, height)
  1289. {
  1290.     var cuswidth = 0;
  1291.     var cusheight = 0;
  1292.     if ("undefined" != typeof(width) && "undefined" != typeof(height)) {
  1293.         cuswidth = width;
  1294.         cusheight= height;
  1295.     }
  1296.     
  1297.     if (DHTMLPopupSupport()) {
  1298.         var nToken = takeToken(); // take  token first.
  1299.         var nIndex = _BSSCCreatePopupDiv(strURL);
  1300.         window.gbPopupTimeoutExpired = false;
  1301.         var ntWidth = gBsClientWidth;
  1302.         var ntHeight = gBsClientHeight;
  1303.         _BSPSGetClientSize();
  1304.         if (ntWidth != gBsClientWidth || ntHeight != gBsClientHeight) {
  1305.             setDirty();
  1306.         }
  1307.  
  1308.         if (IsDirty(nIndex)) 
  1309.         {
  1310.             if(gbAIR)
  1311.             {
  1312.                 var tempappTimer = setInterval(function(){DelayBSSCPopup_AfterLoad(nIndex ,nToken ,cuswidth ,cusheight )}, 400);
  1313.                 setIntervalID(nIndex,tempappTimer);
  1314.             }
  1315.             else
  1316.             {
  1317.                 if (gbBsMac) {
  1318.                     setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight  +")", 400);
  1319.                 } else {
  1320.                     setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 100);
  1321.                 }
  1322.             }
  1323.         }
  1324.         else {
  1325.             MoveDivAndShow(nIndex ,nToken, cuswidth, cusheight);
  1326.         }
  1327.     } else {
  1328.         _BSSCPopup2(strURL, cuswidth, cusheight);
  1329.     }
  1330.     return;
  1331. }
  1332.  
  1333. if (gbBsIE55)
  1334. {
  1335.     var ehlpdhtm_fOldBefureUnload = window.onbeforeunload;
  1336.     var gnBsUnload=0;
  1337.     window.onbeforeunload = window_BUnload;
  1338. }
  1339.     
  1340. function window_BUnload()
  1341. {
  1342.     gnBsUnload++;
  1343.     if (gnBsUnload>1)
  1344.         return;
  1345.     for (var i = 0; i < arrayPopupURL.length; i ++)
  1346.         removeThis(document.all(getPopupID(i)));
  1347.     arrayPopupURL.length = 0;    
  1348.     if (ehlpdhtm_fOldBefureUnload)
  1349.         ehlpdhtm_fOldBefureUnload();
  1350. }
  1351.  
  1352. function _BSSCPopup2(strURL, width, height)
  1353. {
  1354.     if (gbBsOpera6&&gbBsMac)
  1355.     {
  1356.         var wmTemp = window.open(document.location.href, gstrPopupSecondWindowName);
  1357.         wmTemp.close();
  1358.         setTimeout("_BSSCPopup3(\""+strURL+"\","+width+","+height+");",100);
  1359.     }
  1360.     else
  1361.         _BSSCPopup3(strURL, width, height);
  1362. }
  1363.         
  1364. function _BSSCPopup3(strURL, width, height)
  1365. {
  1366.     if (window.name == gstrPopupSecondWindowName) {
  1367.         window.location = strURL;
  1368.     } else {
  1369.         if (!gbBsMac || !gbBsNS4) {
  1370.             BSSCHidePopupWindow();
  1371.         }
  1372.         var nX = 0;
  1373.         var nY = 0;
  1374.         var nHeight = 300;
  1375.         var nWidth = 400;
  1376.         if (width > 0 && height > 0) {
  1377.             nHeight = height;
  1378.             nWidth = width;
  1379.         }
  1380.         _BSPSGetClientSize();
  1381.  
  1382.         nX = window.gnPopupScreenClickX;
  1383.         nY = window.gnPopupScreenClickY;
  1384.  
  1385.         if (nY + nHeight + 40 > screen.availHeight) {
  1386.             nY = screen.availHeight - nHeight - 40;
  1387.         }
  1388.         if (nX + nWidth + 40 > screen.availWidth) {
  1389.             nX = screen.availWidth - nWidth - 40;
  1390.         }
  1391.  
  1392.         // Launch a separate window
  1393.         var strParam="titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes";
  1394.         if (gbBsNS) {
  1395.             if (gbBsNS6) {
  1396.                 strParam += ",Height=" + nHeight + "px,Width=" + nWidth+"px";
  1397.                 strParam += ",screenX=" + nX + ",screenY=" + nY;
  1398.                 strParam += ",dependent=yes";
  1399.             }
  1400.             else {
  1401.                 strParam += ",OuterHeight=" + nHeight + ",OuterWidth=" + nWidth;
  1402.                 strParam += ",screenX=" + nX + ",screenY=" + nY;
  1403.                 strParam += ",dependent=yes";
  1404.             }
  1405.         }
  1406.         else {
  1407.             strParam += ",height=" + nHeight + ",width=" + nWidth;
  1408.             strParam += ",left=" + nX + ",top=" + nY;
  1409.         }
  1410.         if (gbBsSafari)
  1411.         {
  1412.             if (window.gPopupWindow)
  1413.                 window.gPopupWindow.close();        
  1414.             window.gPopupWindow = window.open(strURL, "", strParam);
  1415.             window.gPopupWindow.name = gstrPopupSecondWindowName;
  1416.             window.gPopupWindow.moveTo(nX, nY);
  1417.             window.gPopupWindow.document.location.reload();
  1418.         }    
  1419.         else
  1420.         {
  1421.             var wmTemp=null;
  1422.             if (gbBsKonqueror3)
  1423.             {
  1424.                 if (window.gPopupWindow)
  1425.                     window.gPopupWindow.close();
  1426.             }
  1427.             if (gbBsOpera&&gbBsMac)
  1428.             {
  1429.                 wmTemp= window.open(document.location.href, "Temp", strParam);
  1430.             }
  1431.             window.gPopupWindow = window.open(strURL, gstrPopupSecondWindowName, strParam);
  1432.             if (!gbBsIE)
  1433.                 window.gPopupWindow.focus();
  1434.                 
  1435.             if (wmTemp)
  1436.                 wmTemp.close();
  1437.         }
  1438.  
  1439.         if (gbBsNS4)
  1440.             setEventHandle();
  1441.         else if (gbBsIE4 || gbBsOpera7||gbBsKonqueror3)
  1442.             setTimeout("setPopupFocus();", 100);
  1443.     }
  1444.     return;
  1445. }
  1446.  
  1447. function setEventHandle()
  1448. {
  1449.     window.gPopupWindow.captureEvents(Event.CLICK | Event.BLUR);
  1450.     window.gPopupWindow.onclick = NonIEPopup_HandleClick;
  1451.     window.gPopupWindow.onblur = NonIEPopup_HandleBlur;
  1452. }
  1453.  
  1454. function setPopupFocus()
  1455. {
  1456.     window.gPopupWindow.focus();
  1457. }
  1458.  
  1459. function NonIEPopup_HandleBlur(e)
  1460. {
  1461.     window.gPopupWindow.focus();
  1462. }
  1463.  
  1464. function NonIEPopup_HandleClick(e)
  1465. {
  1466.     // Because navigator will give the event to the handler before the hyperlink, let's
  1467.     // first route the event to see if we are clicking on a Popup menu in a popup.
  1468.     document.routeEvent(e);
  1469.  
  1470.     // If a popup menu is active then don't do anything with the click
  1471.     if (window.gPopupWindow.gbInPopupMenu) {
  1472.         window.gPopupWindow.captureEvents(Event.CLICK);
  1473.         window.gPopupWindow.onclick = NonIEPopup_HandleClick;
  1474.         return false;
  1475.     }
  1476.  
  1477.     // Close the popup window
  1478.     if(e.target.href)
  1479.     {
  1480.         if(e.target.href.indexOf("javascript:")==-1) 
  1481.         {
  1482.             if (e.target.target=="")
  1483.                 window.location.href = e.target.href;
  1484.             else
  1485.                 window.open(e.target.href, e.target.target);
  1486.             this.close();
  1487.         }
  1488.     } 
  1489.     else
  1490.         this.close();
  1491.     return false;
  1492. }
  1493.  
  1494. function BSSCPopup_AfterLoad(nIndex, nToken, cuswidth, cusheight)
  1495. {    
  1496.     if (!window.getPopupIFrame(nIndex).document) {
  1497.         _BSSCPopup2(getPopupURL(nIndex), cuswidth, cusheight);
  1498.         return;
  1499.     }
  1500.     
  1501.     if (!IsValidToken(nToken)) return;
  1502.  
  1503.     if (gbSafari3||gbAIR)
  1504.     {
  1505.         setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url.
  1506.         BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight);
  1507.         return;
  1508.     }
  1509.     
  1510.     if (gbBsNS6)
  1511.     {
  1512.         setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url.
  1513.         setTimeout("BSSCPopup_ResizeAfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);
  1514.         return;
  1515.     }
  1516.     
  1517.     if ((window.getPopupIFrame(nIndex).document.readyState == "complete") &&
  1518.         (window.getPopupIFrame(nIndex).document.body != null)) {
  1519.             if (window.getPopupIFrame(nIndex).document.location.href.indexOf("about:blank") != -1) { // add this check. IE will use about:blank" as the default vaule for Iframe.
  1520.                 window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex);
  1521.                 setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);
  1522.             }
  1523.             else
  1524.                 {
  1525.                     setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url.
  1526.                     BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight);
  1527.                 }
  1528.     } else {
  1529.         setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);
  1530.     }
  1531. }
  1532.  
  1533. function BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight)
  1534. {
  1535.     if (window.gbPopupTimeoutExpired) return;
  1536.  
  1537.     if (!IsValidToken(nToken)) return;
  1538.  
  1539.     getPopupDivStyle(nIndex).visibility = gBsStyVisHide;
  1540.     getPopupIFrameStyle(nIndex).visibility = gBsStyVisHide;
  1541.  
  1542.     // Determine the width and height for the window
  1543.     _BSPSGetClientSize();
  1544.  
  1545.     var size = new BSSCSize(0, 0);
  1546.  
  1547.     if (cuswidth <= 0 || cusheight <= 0)
  1548.         BSSCGetContentSize(window.getPopupIFrame(nIndex), size);
  1549.     else {
  1550.         size.x = cuswidth;
  1551.         size.y = cusheight;
  1552.     }
  1553.  
  1554.     // Determine the width and height for the window
  1555.     var nWidth = size.x;
  1556.     var nHeight = size.y;
  1557.  
  1558.     // for small popup size, we should allow any size.
  1559.     // The popup size should be ok if bigger than 0
  1560.     if (nWidth < 0 || nHeight < 0) return;     // there must be something terribly wrong.        
  1561.  
  1562.     getPopupDivStyle(nIndex).width = nWidth+ "px" ;
  1563.     getPopupDivStyle(nIndex).height = nHeight+ "px" ;
  1564.     
  1565.     getPopupShadowStyle(nIndex).width = nWidth + "px" ;
  1566.     getPopupShadowStyle(nIndex).height = nHeight + "px" ;
  1567.     
  1568.     
  1569.     getPopupTopicStyle(nIndex).width = nWidth + "px" ;
  1570.     getPopupTopicStyle(nIndex).height = nHeight + "px" ;
  1571.     
  1572.     getPopupIFrameStyle(nIndex).width = nWidth + "px" ;
  1573.     getPopupIFrameStyle(nIndex).height = nHeight + "px" ;
  1574.         
  1575.     if (gbBsIE55 )
  1576.     {
  1577.         getPopupTopicStyle(nIndex).width = nWidth + 10+ "px" ;
  1578.         getPopupTopicStyle(nIndex).height = nHeight + 10+ "px" ;
  1579.         getPopupIFrameStyle(nIndex).width = nWidth + 10+ "px" ;
  1580.         getPopupIFrameStyle(nIndex).height = nHeight + 10+ "px" ;
  1581.         getPopupShadowStyle(nIndex).width = nWidth + 10+ "px" ;
  1582.         getPopupShadowStyle(nIndex).height = nHeight + 10+ "px" ;
  1583.     }    
  1584.     
  1585.     if (gbBsIE55 || gbBsNS6 || gbSafari3||gbAIR)
  1586.     {
  1587.         getPopupIFrameStyle(nIndex).top = 0;
  1588.         getPopupIFrameStyle(nIndex).left = 0;
  1589.     }
  1590.     
  1591.     var strURL = getPopupURL(nIndex);
  1592.     if (strURL.indexOf("#") != -1&&gbBsNS6)
  1593.         getPopupIFrame(nIndex).location.reload();
  1594.     else if (strURL.indexOf("#") != -1||gbBsNS6)
  1595.         getPopupIFrame(nIndex).location.href = strURL;  // reload again, this will fix the bookmark misunderstand in IE5.
  1596.         
  1597.     MoveDivAndShow(nIndex, nToken, cuswidth, cusheight);
  1598. }
  1599.  
  1600. function getScrollLeft()
  1601. {
  1602.     if( typeof( window.pageXOffset) == 'number' ) 
  1603.         return window.pageXOffset ;
  1604.     else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) 
  1605.         return document.body.scrollLeft ;
  1606.     else if( document.documentElement && document.documentElement.scrollLeft  ) 
  1607.         return document.documentElement.scrollLeft;
  1608.     else
  1609.         return 0 ;    
  1610. }
  1611.  
  1612. function getScrollTop()
  1613. {
  1614.     if( typeof( window.pageYOffset) == 'number' ) 
  1615.         return window.pageYOffset ;
  1616.     else if( document.body && document.body.scrollTop ) 
  1617.         return document.body.scrollTop ;
  1618.     else if( document.documentElement && document.documentElement.scrollTop  ) 
  1619.         return document.documentElement.scrollTop;
  1620.     else
  1621.         return 0 ;    
  1622. }
  1623.  
  1624.  
  1625. function MoveDivAndShow(nIndex, nToken, cuswidth, cusheight)
  1626. {
  1627.     if (window.getPopupIFrame(nIndex).document.location.href != getAbsPopupURL(nIndex)) { // if redirect, reload again.
  1628.             window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex);
  1629.             if(gbAIR)
  1630.             {
  1631.                 BSSCPopup_AfterLoad(nIndex ,nToken ,cuswidth ,cusheight );
  1632.             }
  1633.             else
  1634.                 setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);
  1635.             return;
  1636.     }
  1637.  
  1638.     // Determine the position of the window
  1639.     var nClickX = window.gnPopupClickX;
  1640.     var nClickY = window.gnPopupClickY;
  1641.     var nTop = 0;
  1642.     var nLeft = 0;
  1643.     
  1644.     var nWidth = parseInt(getPopupDivStyle(nIndex).width);
  1645.     var nHeight = parseInt(getPopupDivStyle(nIndex).height);
  1646.     
  1647.     if (nClickY + nHeight + 20 < gBsClientHeight + getScrollTop()) {
  1648.         nTop = nClickY + 10;
  1649.     } else {
  1650.         nTop = (getScrollTop() + gBsClientHeight) - nHeight - 20;
  1651.     }
  1652.     if (nClickX + nWidth < gBsClientWidth + getScrollLeft()) {
  1653.         nLeft = nClickX;
  1654.     } else {
  1655.         nLeft = (getScrollLeft() + gBsClientWidth) - nWidth - 8;
  1656.     }
  1657.  
  1658.     if (nTop < getScrollTop()) nTop  = getScrollTop() + 1;
  1659.     if (nLeft< getScrollLeft())  nLeft = getScrollLeft() + 1;
  1660.     
  1661.        if (isNaN(nLeft))
  1662.         getPopupDivStyle(nIndex).left = nClickX + "px";    
  1663.     else
  1664.         getPopupDivStyle(nIndex).left = nLeft+ "px";    
  1665.     
  1666.     if (isNaN(nTop))
  1667.         getPopupDivStyle(nIndex).top = nClickY  + "px";
  1668.     else
  1669.         getPopupDivStyle(nIndex).top = nTop + "px";
  1670.  
  1671.     // Set the location of the background blocks
  1672.     getPopupShadowStyle(nIndex).left = 6 + "px";
  1673.     getPopupShadowStyle(nIndex).top = 6 + "px";
  1674.     if (gbBsIE55)
  1675.     {
  1676.         getPopupShadowStyle(nIndex).left = 4;
  1677.         getPopupShadowStyle(nIndex).top = 4;
  1678.     }
  1679.     
  1680.     if (gbBsMac&&gbBsIE4) {
  1681.         // Total hack on the iMac to get the IFrame to position properly
  1682.         getPopupIFrameStyle(nIndex).pixelLeft = 100;
  1683.         getPopupIFrameStyle(nIndex).pixelLeft = 0;
  1684.         // Explicitly call BSSCOnLoad because the Mac doesn't seem to do it
  1685.         getPopupIFrame(nIndex).window.BSSCOnLoad();
  1686.     }
  1687.  
  1688.     if (gbBsNS6&&IsDirty(nIndex))
  1689.         getElement(getPopupIFrameID(nIndex)).addEventListener("load", handleLoadNS, false);
  1690.     else
  1691.         BSSCPopup_Timeout(nIndex , nToken );
  1692.     return;
  1693. }
  1694.  
  1695. function    BSSCSize(x, y)
  1696. {
  1697.     this.x = x;
  1698.     this.y = y;
  1699. }
  1700.  
  1701. function BSSCGetContentSize(thisWindow, size)
  1702. {
  1703.     if (!gbBsIE4 && !gbBsOpera7 && !gbBsNS4 && !gbSafari3 && !gbAIR)
  1704.         return;
  1705.  
  1706.  
  1707.     if ((gbBsMac&&gbBsIE4)||gbBsOpera7) {
  1708.         size.x = 320;
  1709.         size.y = 180;
  1710.         return;
  1711.     }
  1712.  
  1713.     // Resize the width until it is wide enough to handle the content
  1714.     // The trick is to start wide and determine when the scrollHeight changes
  1715.     // because then we know a scrollbar is necessary. We can then go back
  1716.     // to the next widest size (for no scrollbar)
  1717.  
  1718.     var ClientRate = gBsClientHeight / gBsClientWidth;
  1719.  
  1720.     
  1721.     var GoldenSize = new BSSCSize(0,0);
  1722.     GoldenSize.x = gBsClientWidth * getBMaxXOfParent();
  1723.     GoldenSize.y = gBsClientHeight *getBMaxYOfParent() ;
  1724.  
  1725.     if (ClientRate > gBRateH_W) {
  1726.         GoldenSize.y = GoldenSize.x * gBRateH_W;
  1727.     }
  1728.     else {
  1729.         GoldenSize.x = GoldenSize.y / gBRateH_W;
  1730.     }
  1731.  
  1732.     // Try to using parent specified max x.
  1733.     var x = 0;
  1734.     var maxgoldx = GoldenSize.x;
  1735.     var maxx = gBsClientWidth * getBMaxXOfParent();
  1736.     
  1737.     var miny = getScrollHeight(thisWindow) + getBscrollHeight();
  1738.     
  1739.     if (miny > GoldenSize.y) // the popup does not fix in the parent wanted golden area. so try to expand itself as large as it can
  1740.     {
  1741.         if(gbBsIE55)
  1742.         {
  1743.             thisWindow.resizeTo(maxx , getScrollHeight(thisWindow) + getBscrollHeight());
  1744.         }
  1745.         
  1746.         miny =     getScrollHeight(thisWindow) + getBscrollHeight();
  1747.         maxy = gBsClientHeight * getBMaxYOfParent();
  1748.         
  1749.         if (miny > maxy) { // the popup must have a scroll, OK let it be.
  1750.             miny = maxy;
  1751.             size.x = maxx;
  1752.             size.y = maxy;
  1753.             thisWindow.document.body.scroll = 'yes'; // At this time we do want to show scroll any more. so it will looks better a little.
  1754.         }
  1755.         else { // popup still can fit in the parent area by someway. now we choose the same h/w rate as parent.
  1756.             size.y = miny;
  1757.             
  1758.             //  downsize from maxx , now I try to using binary divide.
  1759.             x = maxx;
  1760.             deltax = -maxx/2;
  1761.             //j = 0;
  1762.             while (true) {
  1763.                 x = x + deltax;
  1764.                 diffy = getScrollHeight(thisWindow) + getBscrollHeight() - x * ClientRate;
  1765.                 if (diffy >  gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter
  1766.                     deltax = Math.abs(deltax) /2;
  1767.                 else if (diffy <  -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter
  1768.                     deltax = -Math.abs(deltax) /2;
  1769.                 else 
  1770.                     // the y is close enough to wanted.
  1771.                     break;
  1772.                 if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore.
  1773.                     break;
  1774.             }
  1775.             size.x = getScrollWidth(thisWindow); //+ gBscrollWidth;
  1776.             size.y = getScrollHeight(thisWindow);// + gBscrollHeight;    
  1777.             thisWindow.document.body.scroll = 'no';
  1778.         }
  1779.     }
  1780.     else {
  1781.         if (getScrollWidth(thisWindow) > maxgoldx) {
  1782.             size.x = maxx; 
  1783.             size.y = miny;    
  1784.             thisWindow.document.body.scroll = 'yes';
  1785.         }
  1786.         else {
  1787.             //  downsize from maxgoldx , now I try to using binary divide.            
  1788.             x = maxgoldx;
  1789.             deltax = -maxgoldx/2;
  1790.             while (true) {
  1791.                 x = x + deltax;
  1792.                 diffy = getScrollHeight(thisWindow) + getBscrollHeight() - x * getBRateH_W();
  1793.                 if (diffy >  gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter
  1794.                     deltax = Math.abs(deltax) /2;
  1795.                 else if (diffy <  -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter
  1796.                     deltax = -Math.abs(deltax) /2;
  1797.                 else 
  1798.                     // the y is close enough to wanted.
  1799.                     break;
  1800.                 if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore.
  1801.                     break;
  1802.             }
  1803.             size.x = getScrollWidth(thisWindow);
  1804.             size.y = getScrollHeight(thisWindow) ;
  1805.             thisWindow.document.body.scroll = 'no'; // At this time we do not want to show scroll any more. so it will looks better a little.
  1806.             if (getScrollWidth(thisWindow) > size.x)
  1807.             {
  1808.                 size.x = getScrollWidth(thisWindow);
  1809.             }
  1810.             if (getScrollHeight(thisWindow) > size.y)
  1811.             {
  1812.                 size.y = getScrollHeight(thisWindow);
  1813.             }
  1814.         }
  1815.     }
  1816.     if (gbBsNS6)
  1817.         size.y = size.y + 20 ;    
  1818.     return;
  1819. }
  1820.  
  1821. function getScrollWidth(thisWindow)
  1822. {
  1823.    var w =  thisWindow.document.body.scrollWidth ? thisWindow.document.body.scrollWidth : thisWindow.window.pageXOffset  ; 
  1824.    return w ? w : 0;
  1825.  
  1826. function getScrollHeight(thisWindow)
  1827. {
  1828.    var h = thisWindow.document.body.scrollHeight ? thisWindow.document.body.scrollHeight : thisWindow.window.pageYOffset  ; 
  1829.    return h ? h : 0;
  1830. }
  1831.  
  1832.  
  1833. function BSSCPopupParentClicked()
  1834. {
  1835.     if (!window.gbPopupTimeoutExpired) {
  1836.         return false;
  1837.     }
  1838.     
  1839.     document.onmousedown = gbOrignalOnMouseDown;
  1840.  
  1841.     // Simply hide the popup
  1842.     hideAll();
  1843.  
  1844.     window.gbPopupTimeoutExpired = false;
  1845.  
  1846.     return true;
  1847. }
  1848.  
  1849. function isInsideHyperLink(obj)
  1850. {
  1851.     if (obj&&obj!=getParentNode(obj))
  1852.     {
  1853.         if (obj.tagName=="A"||obj.tagName=="IMG")
  1854.             return true;
  1855.         else
  1856.             return isInsideHyperLink(getParentNode(obj));
  1857.     }
  1858.     else
  1859.         return false;
  1860. }
  1861.  
  1862. function BSSCPopupClicked(e)
  1863. {
  1864.     if (!window.gbPopupTimeoutExpired) {
  1865.         return false;
  1866.     }
  1867.  
  1868.     var popupIFrame = getCurrentPopupIFrame();
  1869.     if (popupIFrame == null) {
  1870.         return true;
  1871.     }
  1872.  
  1873.     if (gbBsIE4 && (!((popupIFrame.window.event != null) &&
  1874.         (popupIFrame.window.event.srcElement != null) &&
  1875.         isInsideHyperLink(popupIFrame.window.event.srcElement)))) {
  1876.         document.onmousedown = gbOrignalOnMouseDown;
  1877.         
  1878.         // Simply hide the popup
  1879.         hideAll();
  1880.         window.gbPopupTimeoutExpired = false;
  1881.         return true;
  1882.     }
  1883.     else if (!gbAIR && gbBsNS6 && (!((e != null) &&
  1884.             (e.target!= null) && isInsideHyperLink(e.target))))
  1885.     {
  1886.         document.removeEventListener("mousedown", BSSCPopupParentClicked,false);
  1887.         if(gbOrignalOnMouseDown)
  1888.             document.addEventListener("mousedown", gbOrignalOnMouseDown,false);
  1889.         // Simply hide the popup
  1890.         hideAll();
  1891.         window.gbPopupTimeoutExpired = false;
  1892.         return true;        
  1893.     }
  1894. }
  1895.  
  1896. //trace the mouse over's position for hotspot
  1897. function  BSPSPopupOnMouseOver(event)
  1898. {
  1899.     if (gbBsIE4 || gbBsOpera7||gbBsKonqueror3) {
  1900.         window.gnPopupClickX = event.clientX + getScrollLeft();
  1901.         window.gnPopupClickY = event.clientY + getScrollTop();
  1902.         window.gnPopupScreenClickX = event.screenX;
  1903.         window.gnPopupScreenClickY = event.screenY;
  1904.     } else if (gbBsSafari) {
  1905.         window.gnPopupClickX = event.clientX + getScrollLeft();
  1906.         window.gnPopupClickY = event.clientY + getScrollTop();
  1907.         window.gnPopupScreenClickX = event.screenX + window.screenX;
  1908.         window.gnPopupScreenClickY = event.screenY + window.screenY;
  1909.     } else if (gbBsNS4) {
  1910.         window.gnPopupClickX = event.pageX - window.pageXOffset;
  1911.         window.gnPopupClickY = event.pageY - window.pageYOffset;
  1912.         window.gnPopupScreenClickX = event.screenX - window.pageXOffset;
  1913.         window.gnPopupScreenClickY = event.screenY - window.pageYOffset;
  1914.     }
  1915. }
  1916.  
  1917. function BSSCHidePopupWindow()
  1918. {
  1919.     if (window.gPopupWindow != null) {
  1920.         if (gbBsNS4) {
  1921.             if ((typeof window.gPopupWindow != "undefined") && (!window.gPopupWindow.closed)) {
  1922.                 window.gPopupWindow.close();
  1923.                 window.gPopupWindow = null;
  1924.             }
  1925.         }
  1926.     }
  1927.     return;
  1928. }
  1929.  
  1930. // Add the PopupOnClick to the onclick array.
  1931. if (typeof(BsscRegisterOnClick) != "undefined")
  1932. {
  1933.     BsscRegisterOnClick(BsPopupOnClick);
  1934. }
  1935. //End to support previous popup functions
  1936.  
  1937. /// Section End  - Popup (JavaScript 1.0)
  1938.  
  1939. /// Section Begin - Embedded Stub (JavaScript 1.0)
  1940.  
  1941. function BSSCCreatePopupDiv()
  1942. {
  1943.     return;
  1944. }
  1945.  
  1946. function WritePopupMenuLayer()
  1947. {
  1948.     if (BsscHasExtJs()) {_WritePopupMenuLayer();}
  1949. }
  1950.  
  1951. function BSSCPopup(strURL, width, height)
  1952. {
  1953.     var re = new RegExp("'", 'g');
  1954.     strURL = strURL.replace(re, "%27");
  1955.  
  1956.     if (BsscHasExtJs())    { 
  1957.         _BSSCPopup(strURL, width, height);
  1958.     }else{
  1959.         //Create a temporary window first to ensure the real popup comes up on top
  1960.         var wndTemp = null;
  1961.         if (!gbBsNS3) {
  1962.             wndTemp = window.open("", "temp", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=3,width=4");
  1963.         }
  1964.         // Create the real popup window
  1965.         var wndPopup = window.open(strURL, "BSSCPopup", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=300,width=400");
  1966.         // Close the temporary
  1967.         if (!gbBsNS3) {
  1968.             wndTemp.close();
  1969.         } else {
  1970.             wndPopup.focus();
  1971.         }
  1972.     }
  1973. }
  1974.  
  1975. var gbWndTemp = null, gbWndPopupLinks = null;
  1976. var gbstrParaTotal = "";
  1977.  
  1978. function PopupMenu_Invoke()
  1979. {
  1980.     if (typeof(wfRelatedTopic) == 'function' && typeof(IsFlashSupported) == 'function')
  1981.     {
  1982.         if (Number(gsSkinVersion) > 2 && IsFlashSupported())
  1983.         {
  1984.             return wfRelatedTopic(PopupMenu_Invoke.arguments);
  1985.         }
  1986.     }
  1987.     if (BsscHasExtJs()) {
  1988.         return _PopupMenu_Invoke(PopupMenu_Invoke.arguments);
  1989.     }
  1990.     if (gbBsNS3Before || gbBsIE3Before )    {
  1991.         var argLen     = PopupMenu_Invoke.arguments.length;
  1992.         if (argLen < 5) {
  1993.             window.document.location.href = PopupMenu_Invoke.arguments[3];
  1994.             return false;
  1995.         }
  1996.         gbWndTemp = null;
  1997.         gbWndPopupLinks = null;
  1998.         gbstrParaTotal = "";
  1999.         for (var i = 0; i < (argLen - 2) / 2; i++) {
  2000.             var strParaLine = "";
  2001.             if (gbBsNS2){
  2002.                 strParaLine += "<a href=\"";
  2003.                 strParaLine += PopupMenu_Invoke.arguments[2 * i + 3];
  2004.                 strParaLine += "\">"
  2005.                 strParaLine += PopupMenu_Invoke.arguments[2 * i + 2];
  2006.                 strParaLine += "</a>";
  2007.             } else {
  2008.                 strParaLine += "<a href=\"javascript:";
  2009.                 strParaLine += "gotoUrl(\'";
  2010.                 strParaLine += PopupMenu_Invoke.arguments[2 * i + 3];
  2011.                 strParaLine += "\');\"";
  2012.                 if (PopupMenu_Invoke.arguments[1] != '') {
  2013.                     strParaLine += " TARGET='" + PopupMenu_Invoke.arguments[1] + "'";
  2014.                 }
  2015.                 strParaLine += ">";
  2016.                 strParaLine += PopupMenu_Invoke.arguments[2 * i + 2];
  2017.                 strParaLine += "</a>";
  2018.             }
  2019.             strParaLine += "<br>";
  2020.             gbstrParaTotal += strParaLine;
  2021.         }
  2022.         var nHeight = argLen * 15;
  2023.         var nWidth = 400;
  2024.         var strParam = "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=auto";
  2025.         strParam += ",height=" + nHeight + ",width=200,resizable";
  2026.         
  2027.         //Create a temporary window first to ensure the real popup comes up on top
  2028.         //var wndTemp = null;
  2029.         if (!gbBsNS3) {
  2030.             gbWndTemp = window.open("", "temp", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=3,width=4");
  2031.         } 
  2032.         gbWndPopupLinks = window.open("", "popuplinks", strParam);
  2033.  
  2034.         setTimeout("Wait_PopupMenuReady()", 100);
  2035.     }
  2036.     return true;
  2037. }
  2038.  
  2039. function Wait_PopupMenuReady() 
  2040. {
  2041.     if (gbWndPopupLinks != null && "object" == typeof(gbWndPopupLinks.document)) {
  2042.         PopupMenu_InvokeReady();
  2043.     }
  2044.     else 
  2045.         setTimeout("Wait_PopupMenuReady()", 100);
  2046. }
  2047.  
  2048. function PopupMenu_InvokeReady()
  2049. {
  2050.     if (gbWndPopupLinks != null) {
  2051.         gbWndPopupLinks.document.open("text/html");
  2052.         gbWndPopupLinks.document.write("<html><head>");
  2053.         if (gbBsNS2) {
  2054.             gbWndPopupLinks.document.write("<base href=\"" + location +"\">");
  2055.         } else {
  2056.             //YJ: IE301,302 and NS3.x works fine
  2057.             gbWndPopupLinks.document.write("<");
  2058.             gbWndPopupLinks.document.write("script>");
  2059.             gbWndPopupLinks.document.write("function gotoUrl(aUrl) {opener.window.location=aUrl; close();}");
  2060.             gbWndPopupLinks.document.write("<");
  2061.             gbWndPopupLinks.document.write("/script>");
  2062.         }
  2063.         gbWndPopupLinks.document.write("<");
  2064.         gbWndPopupLinks.document.write("/head>");
  2065.         gbWndPopupLinks.document.write("<body onBlur=\'self.focus();\'>");
  2066.         gbWndPopupLinks.document.write(gbstrParaTotal);
  2067.         gbWndPopupLinks.document.write("</body></html>");
  2068.         gbWndPopupLinks.document.close();
  2069.  
  2070.         // Close the temporary
  2071.         if (!gbBsNS3 && gbWndTemp != null) {
  2072.             gbWndTemp.close();
  2073.         }else {
  2074.             gbWndPopupLinks.focus();
  2075.         }
  2076.  
  2077.         return true;
  2078.     }
  2079.     return false;
  2080. }
  2081.  
  2082. /// Section End - Embedded Stub (JavaScript 1.0)
  2083.  
  2084. //// Segment End -- (JavaScript 1.0)
  2085.  
  2086. //// Segment Begin -- (JavaScript 1.2)
  2087. /// Section Begin  - DHTM (JavaScript 1.2)
  2088.  
  2089. //Begin to support extended and dropdown text effects.
  2090. function IsParagraph(el)
  2091. {
  2092.     return( el.tagName == "P" || el.tagName.indexOf("H") == 0 ) ? true : false;
  2093. }
  2094.  
  2095. //Begin to support extended and dropdown text effects.
  2096. function kadovIsParagraph(el)
  2097. {
  2098.     return IsParagraph(el);
  2099. }
  2100.  
  2101.  
  2102. function InitEachChild(el)
  2103. {    
  2104.     for(var i=0; i<getChildNodes(el).length; i++)
  2105.     {
  2106.         var child = getChildNodes(el)[i];
  2107.         if( child.tagName == "SCRIPT" || child.tagName == "!" )
  2108.             continue;
  2109.  
  2110.         if( child.id != "" )
  2111.         {
  2112.             // to wipe out the onload effects
  2113.             if (gbBsIE4&&!gbBsMac)
  2114.             {
  2115.                 var onLoadEffect = getAttribute(child.style, "x-on-pageload" );
  2116.                 if( (onLoadEffect != null) && (onLoadEffect > "") )
  2117.                     setAttribute(child.style, "x-on-pageload", "" );
  2118.             }
  2119.             
  2120.             var href = getAttribute(child,"href");
  2121.             if( href != null && href > "" && href.indexOf( "BSSCPopup" ) >= 0 )
  2122.                 FilePopupInit(child.id); // Init for Popup
  2123.             else if( child.className == "dropspot" || child.className == "expandspot" || 
  2124.                      child.className == "glossterm" )
  2125.                 TextPopupInit(child.id);// Init for Expanding/Glossary or DropDown text
  2126.             else if( child.className == "trigger")
  2127.                 InitTrigger(child.id);// Init for Trigger
  2128.             else
  2129.             {
  2130.                 InitEffects(child.id);// Init for DHTML effects
  2131.                 CEngine.SetOneTargetInitialState( child.id );
  2132.             }
  2133.         }
  2134.         
  2135.         if( (child.tagName == "IMG") && (getAttribute(child,"dynsrc") > "") )
  2136.             child.start = "mouseover";// to start a AVI file. fileopen doesn't work
  2137.  
  2138.         InitEachChild(child);
  2139.     }
  2140. }
  2141.  
  2142. function kadovInitEachChild(el)
  2143. {    
  2144.     InitEachChild(el);
  2145. }
  2146.  
  2147. function RetrieveTextInner(el)
  2148. {    
  2149.     var x = "";
  2150.     if( (!el) || (el.tagName == "!") || (el.tagName == "SCRIPT" ))
  2151.         return x;
  2152.  
  2153.     if( IsParagraph(el) )
  2154.     {
  2155.         var strNewID = " ";
  2156.         if( el.id != "" )
  2157.             strNewID += "id=" + el.id + "_NewSpan ";
  2158.         x = "<span" + strNewID + "style='" + el.style.cssText + "'>" + el.innerHTML + "</span>";
  2159.     }
  2160.     else
  2161.     {
  2162.         for(var i=0; i<getChildNodes(el).length; i++)
  2163.             x += RetrieveTextInner( getChildNodes(el)[i] );
  2164.     }
  2165.     return x;
  2166. }
  2167.  
  2168. function kadovRetrieveTextInner(el)
  2169. {
  2170.     return     RetrieveTextInner(el);
  2171. }
  2172.  
  2173. function RetrieveCleanHTML( strRawHTML, strTagOpen, strTagClose, nDistance )
  2174. {    
  2175.     var nTagOpen = strRawHTML.indexOf( strTagOpen, 0 );
  2176.     if( nTagOpen < 0 )
  2177.         return strRawHTML;
  2178.  
  2179.     var nTagClose = strRawHTML.indexOf( strTagClose, nTagOpen);
  2180.     if( nTagClose < nTagOpen )
  2181.         return strRawHTML;
  2182.         
  2183.     if( typeof(nDistance) == "number" && nDistance > 0 )
  2184.         if( (nTagClose - nTagOpen) != nDistance )
  2185.             return strRawHTML;
  2186.         
  2187.     var strCleanOnce = strRawHTML.substring(0, nTagOpen) + strRawHTML.substr(nTagClose + strTagClose.length) ;
  2188.     return     RetrieveCleanHTML( strCleanOnce, strTagOpen, strTagClose );
  2189. }
  2190.  
  2191. function kadovRetrieveCleanHTML( strRawHTML, strTagOpen, strTagClose, nDistance )
  2192. {    
  2193.     return RetrieveCleanHTML( strRawHTML, strTagOpen, strTagClose, nDistance );
  2194. }    
  2195.  
  2196. function AdjustObjectTag(strRawHTML, nStartPos)
  2197. {// adjust object tag for related topics HTML control, because innerHTML misses out the item settings
  2198.     
  2199.     //Is there any DTC?
  2200.     var strDTCTagOpen = '<!--Metadata type="DesignerControl" startspan';
  2201.     var strDTCTagClose = '<!--Metadata type="DesignerControl" endspan-->';
  2202.     var nDTCTagOpen = strRawHTML.indexOf( strDTCTagOpen, nStartPos );
  2203.     if( nDTCTagOpen < 0 )
  2204.         return strRawHTML;
  2205.     var nDTCTagClose = strRawHTML.indexOf( strDTCTagClose, nDTCTagOpen );
  2206.     if( nDTCTagClose < nDTCTagOpen)
  2207.         return strRawHTML; // no Design Time Controls;
  2208.         
  2209.     //Is the DTC HTML Help Control?
  2210.     var strRTObjTagOpen = 'classid=clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11';
  2211.     var strRTObjTagClose = '</OBJECT>';
  2212.     var nRTObjTagOpen = strRawHTML.indexOf( strRTObjTagOpen, nDTCTagOpen );
  2213.     if( nRTObjTagOpen < nDTCTagOpen )
  2214.         return strRawHTML;
  2215.     var nRTObjTagClose = strRawHTML.indexOf( strRTObjTagClose, nRTObjTagOpen );
  2216.     if( nRTObjTagClose < nRTObjTagOpen )
  2217.         return strRawHTML; // is not a HTML help control
  2218.         
  2219.     // Is it a related Topics html help control?
  2220.     var strRTObjLabel = '<PARAM NAME=\"Command\" VALUE=\"Related Topics';
  2221.     if( strRawHTML.indexOf(strRTObjLabel, nRTObjTagOpen) < 0 )
  2222.         return strRawHTML;
  2223.     
  2224.     // does the commented object tag contain a items parameters        
  2225.     var strRTItemsOpen = '<param name="Items" value="';
  2226.     var strRTItemsClose = '$$**$$" >';
  2227.     var strRTItemsClose2 = '$$**$$">';
  2228.  
  2229.     var nRTItemsOpen = strRawHTML.indexOf(strRTItemsOpen, nDTCTagOpen);
  2230.     if( nRTItemsOpen < nDTCTagOpen )
  2231.         return strRawHTML;
  2232.     var nRTItemsClose = strRawHTML.indexOf(strRTItemsClose, nRTItemsOpen);
  2233.     if (nRTItemsClose == -1)
  2234.         nRTItemsClose = strRawHTML.indexOf(strRTItemsClose2, nRTItemsOpen);
  2235.     if( nRTItemsClose < nRTItemsOpen )
  2236.         return strRawHTML;
  2237.         
  2238.     // found a items string
  2239.     var strItems = strRawHTML.substring( nRTItemsOpen + strRTItemsOpen.length, nRTItemsClose);
  2240.     if( strItems.length < 1 )
  2241.         return strRawHTML;
  2242.     
  2243.     // to reconstruct the item(s) param tag(s)
  2244.     var strItemsArray = strItems.split('$$**$$');
  2245.     if( strItemsArray.length < 1 )
  2246.         return strRawHTML;
  2247.     var strRunTimeItemParam = "";
  2248.     for( var i = 0; i < strItemsArray.length; i++ )
  2249.     {
  2250.         strRunTimeItemParam += '<PARAM  NAME="Item' + (i+1);
  2251.         strRunTimeItemParam += '"' + '  VALUE="';
  2252.         strRunTimeItemParam += strItemsArray[i];
  2253.         strRunTimeItemParam += '">';
  2254.     }
  2255.     
  2256.     // to insert the reconstructed item params into runtime object tag
  2257.     var strAdjustedHTML = strRawHTML.substring(0,nRTObjTagClose) + strRunTimeItemParam + strRawHTML.substring(nRTObjTagClose, strRawHTML.length);
  2258.     return AdjustObjectTag(strAdjustedHTML, nDTCTagClose + strDTCTagClose.length);
  2259. }
  2260.  
  2261. function kadovAdjustObjectTag(strRawHTML, nStartPos)
  2262. {// adjust object tag for related topics HTML control, because innerHTML misses out the item settings
  2263.  return AdjustObjectTag(strRawHTML, nStartPos);
  2264. }
  2265.  
  2266. function TextPopupOnLoad( el )
  2267. {
  2268.     if( typeof(el) == "string" )
  2269.         el = getElement(el);
  2270.     var src = null;
  2271.     if(el.id)
  2272.     {
  2273.         for (var i=0;i<gPopupData.length;i++)
  2274.             if (gPopupData[i].el==el.id)
  2275.             {
  2276.                 src=gPopupData[i].popupId;
  2277.                 break;
  2278.             }
  2279.     }
  2280.     if (!src)    
  2281.         return 0;
  2282.  
  2283.     var name = src;
  2284.     if( src.substr(0,1) == "#" ) 
  2285.         name = src.substr(1, src.length-1);
  2286.     var srcDiv = getElement(name);
  2287.     if( !srcDiv )
  2288.         return 1;
  2289.  
  2290.     //srcDiv.style.display = "none";
  2291.     return 0;
  2292. }
  2293. function kadovTextPopupOnLoad( el )
  2294. {
  2295.     return TextPopupOnLoad( el );
  2296. }
  2297. function getElementsByTag(obj,sTagName)
  2298. {
  2299.     if(obj.getElementsByTagName)
  2300.         return obj.getElementsByTagName(sTagName);
  2301.     else if(obj.all)
  2302.         return obj.all.tags(sTagName);
  2303.     return null;
  2304. }
  2305.  
  2306. function getElement(sID)
  2307. {
  2308.     if(document.getElementById)
  2309.         return document.getElementById(sID);
  2310.     else if(document.all)
  2311.         return document.all(sID);
  2312.     return null;
  2313. }
  2314.  
  2315. function getParentNode(obj)
  2316. {
  2317.     if(obj.parentNode)
  2318.         return obj.parentNode;
  2319.     else if(obj.parentElement)
  2320.         return obj.parentElement;
  2321.     return null;
  2322. }
  2323.  
  2324. function getChildNodes(obj)
  2325. {
  2326.     if(obj.childNodes)
  2327.     {
  2328.         var children = new Array();
  2329.         for (var i = 0; i < obj.childNodes.length; i++)
  2330.         {
  2331.             if (obj.childNodes[i].nodeType == 1)
  2332.                 children[children.length] = obj.childNodes[i];
  2333.         }
  2334.         return children;
  2335.     }
  2336.     else if(obj.children)
  2337.         return obj.children;
  2338.     return null;    
  2339. }
  2340.  
  2341. function removeThis(obj)
  2342. {
  2343.     if(obj.parentNode)
  2344.         obj.parentNode.removeChild(obj);
  2345.     else
  2346.         obj.outerHTML="";
  2347. }
  2348.  
  2349. function TextPopup( el )
  2350. {
  2351.     if (!gbBsIE4 && !gbBsOpera7 && !gbBsSafari && !gbBsNS6 && !gbBsKonqueror3 )
  2352.         return;
  2353.     
  2354.     if (window.event)
  2355.         window.event.cancelBubble = true;
  2356.  
  2357.     if( typeof(el) == "string" )
  2358.         el = getElement(el);
  2359.  
  2360.     if (!el||el==window)
  2361.         return;
  2362.  
  2363.     for(var i=0; i<getChildNodes(el).length; i++)
  2364.     {
  2365.         var child = getChildNodes(el)[i];
  2366.         if( child && (child.tagName == "IMG") )
  2367.         {
  2368.             if(child.className == "TwistyImage")
  2369.             {
  2370.                 if( child.style && (child.style.display == "") )
  2371.                     child.style.display = "none";
  2372.                 else if(child.style)
  2373.                     child.style.display = "";
  2374.             }
  2375.         }
  2376.  
  2377.         if( child && (child.tagName == "SPAN") )
  2378.         {
  2379.             if(child.className == "MTText")
  2380.             {
  2381.                 if( child.style && (child.style.display == "") )
  2382.                     child.style.display = "none";
  2383.                 else if(child.style)
  2384.                     child.style.display = "";
  2385.             }
  2386.         }
  2387.     }
  2388.     
  2389.     var src = null;    
  2390.     if(!src&&el.id)
  2391.     {
  2392.         for (var i=0;i<gPopupData.length;i++)
  2393.             if (gPopupData[i].el==el.id)
  2394.             {
  2395.                 src=gPopupData[i].popupId;
  2396.                 break;
  2397.             }
  2398.     }
  2399.     if(!src)
  2400.         return;
  2401.         
  2402.     var name = src;
  2403.     if( src.substr(0,1) == "#" ) 
  2404.     name = src.substr(1, src.length-1);
  2405.  
  2406.     var srcDiv = getElement(name);
  2407.     if( !srcDiv )
  2408.         return;
  2409.  
  2410.     if( srcDiv )
  2411.     {
  2412.         if( srcDiv.style.display == "" )
  2413.             srcDiv.style.display = "none";
  2414.         else
  2415.         {
  2416.             if(srcDiv.className == "expandtext")
  2417.             {
  2418.                 var inner = RetrieveTextInner(srcDiv);
  2419.                 if( inner == "" )
  2420.                     inner = srcDiv.innerHTML;
  2421.                 if(inner.indexOf(" ") != 0 && inner.indexOf(" ") != 0)
  2422.                 {
  2423.                     inner = " " + inner;
  2424.                     srcDiv.innerHTML = inner;
  2425.                 }
  2426.             }
  2427.  
  2428.             srcDiv.style.display = "";
  2429.         }
  2430.     }
  2431.     if(gbBsIE4)
  2432.         event.returnValue=false;
  2433.     return;
  2434. }
  2435.  
  2436. function kadovTextPopup( el )
  2437. {
  2438.     TextPopup( el );
  2439. }
  2440.  
  2441. function FindParentParagraph( el )
  2442. {
  2443.     if( typeof(el) == "string" )
  2444.         el = getElement(el);
  2445.     if( (!el) || el.tagName == "BODY" )
  2446.         return null;
  2447.     if( IsParagraph(getParentNode(el)) )
  2448.         return getParentNode(el);
  2449.     else
  2450.         return FindParentParagraph( getParentNode(el) );
  2451. }
  2452.  
  2453. function kadovFindParentParagraph( el )
  2454. {
  2455.     return FindParentParagraph( el );
  2456. }
  2457.  
  2458. //Begin HTML code invoked function
  2459. function RegisterEventHandler( obj, strEvent, strEventHandler )
  2460. {
  2461.     CCSSP.RegisterEventHandler( obj, strEvent, strEventHandler );
  2462. }
  2463.  
  2464. function kadovRegisterEventHandler( obj, strEvent, strEventHandler )
  2465. {
  2466.  RegisterEventHandler( obj, strEvent, strEventHandler );
  2467. }
  2468.  
  2469.  
  2470. function textPopupData(el, popupId)
  2471. {
  2472.     this.el = el;
  2473.     this.popupId = "#"+popupId;
  2474. }
  2475.  
  2476. var gPopupData = new Array();
  2477.  
  2478. function TextPopupInit( el, popupId)
  2479. {
  2480.     if (!gbBsIE4 && !gbBsOpera7 && !gbBsSafari && !gbBsNS6 && !gbBsKonqueror3)
  2481.         return;
  2482.         
  2483.     if( typeof(el) == "string" )
  2484.     {
  2485.         if (popupId)
  2486.         {
  2487.             gPopupData[gPopupData.length]=new textPopupData(el, popupId);
  2488.         }
  2489.         el = getElement(el);
  2490.     }
  2491.         
  2492.     if( el != null )
  2493.     {
  2494.         CCSSP.RegisterEventHandler( el, "onclick", "TextPopup(\"" + el.id +"\");" );
  2495.         CCSSP.RegisterEventHandler( window, "onload", "TextPopupOnLoad(\"" + el.id +"\");" );
  2496.     }
  2497. }
  2498.  
  2499. function kadovTextPopupInit( el, popupId)
  2500. {
  2501.     return TextPopupInit( el, popupId);
  2502. }
  2503. //End HTML code invoked function
  2504.  
  2505. //End to support extended and dropdown text effects.
  2506.  
  2507. //Begin to convert iWrite format to RoboEditor Format for DHTML effects
  2508. function InitTriggersInHead( )
  2509. {
  2510.   if( Object.xDelayedInitElements )
  2511.   {
  2512.      var x = Object.xDelayedInitElements;
  2513.      for(i=0; i<x.length; i++)
  2514.          InitTrigger( x[i] );
  2515.   }
  2516. }
  2517.  
  2518. function kadovInitTriggersInHead( )
  2519. {
  2520.     InitTriggersInHead( );
  2521. }
  2522.  
  2523. //Begin HTML code invoked function
  2524. function FilePopupInit( el )
  2525. {
  2526.     if( typeof(el) == "string" )
  2527.         el = getElement(el);
  2528.  
  2529.     if( el != null )
  2530.         CCSSP.RegisterEventHandler( el, "onmouseover", "BSPSPopupOnMouseOver(event);" );
  2531. }
  2532. function kadovFilePopupInit( el )
  2533. {
  2534.     FilePopupInit( el );
  2535. }
  2536.  
  2537. function InitTrigger( element, a_targets )
  2538. {
  2539. //    if( !gbBsIE4 )
  2540.     //    return;
  2541.     var srcElement = element;
  2542.     if( typeof(srcElement) == "string" )
  2543.     {
  2544.         srcElement = getElement(element,0);
  2545.         if(srcElement == null)
  2546.             return;
  2547.     }
  2548.     
  2549.     //if( !IsParentVisible(srcElement) )
  2550.     //    return;
  2551.     
  2552.     var targets = null;
  2553.     if(typeof(a_targets) != "undefined")
  2554.         targets = a_targets;
  2555.     if(!targets)
  2556.         targets = getAttribute(srcElement, "x-targets" );
  2557.     if (!targets)
  2558.         targets = getAttribute(srcElement.style,"x-targets");
  2559.     if (!targets)
  2560.         return;    
  2561.     var arrOneTarget = targets.split( "," );
  2562.     for( var i = 0; i < arrOneTarget.length; i ++ )
  2563.         bsscFXInit( element, arrOneTarget[i], null, null, null, null );
  2564. }
  2565.  
  2566. function kadovInitTrigger( element )
  2567. {
  2568.     InitTrigger( element )
  2569. }
  2570.  
  2571. function IsParentVisible( el )
  2572. {
  2573.     if( typeof(el) == "string" )
  2574.         el = getElement(el);
  2575.     if( (!el) || el.tagName == "BODY" )
  2576.         return true;
  2577.     if( el.style.display == 'none' ) //el.visibility == 'hidden' || 
  2578.         return false;
  2579.     else
  2580.         return IsParentVisible( getParentNode(el) );
  2581. }
  2582.  
  2583. function kadovIsParentVisible( el )
  2584. {
  2585.     return IsParentVisible( el );
  2586. }
  2587. function InitEffects( element, effectsList )
  2588. {
  2589.     //if( !gbBsIE4 )
  2590.     //    return;
  2591.     var srcElement = element;
  2592.     if( typeof(srcElement) == "string" )
  2593.     {
  2594.         srcElement = getElement(element,0);
  2595.         if(srcElement == null)
  2596.             return;
  2597.     }
  2598.     
  2599.     //if( !IsParentVisible(srcElement) )
  2600.     //    return;
  2601.  
  2602.     if(effectsList)
  2603.     {
  2604.         //srcElement.setAttribute("style", effectsList);
  2605.         var str = effectsList;
  2606.         var nStart = 0;
  2607.         var indx = str.indexOf(":", nStart);
  2608.         var effect = null;
  2609.         var value = null;
  2610.         while(nStart >= 0 && indx > 0 && indx < str.length)
  2611.         {
  2612.             effect = effectsList.substr(nStart, indx-nStart);
  2613.             var indx2 = str.indexOf(";", nStart);
  2614.             if(indx2 == -1)
  2615.                 indx2 = str.length;
  2616.             value = effectsList.substr(indx+1, indx2);
  2617.             if(effect && value)
  2618.                 setAttribute(srcElement,effect, value);
  2619.             nStart = effectsList.indexOf("x-on", indx2+1);
  2620.             indx = str.indexOf(":", nStart);
  2621.         }
  2622.         
  2623.     }
  2624.     
  2625.     InitEffect( srcElement, "x-on-hover" );
  2626.     InitEffect( srcElement, "x-on-pageclick" );
  2627.     InitEffect( srcElement, "x-on-pageload" );
  2628.     InitEffect( srcElement, "x-on-trigger-1" );
  2629.     InitEffect( srcElement, "x-on-trigger-2" );
  2630. }
  2631.  
  2632. function kadovInitEffects( element )
  2633. {
  2634.     InitEffects( element );
  2635. }
  2636. //End HTML code invoked function
  2637.  
  2638. function InitEffect( element, prop )
  2639. {
  2640.     var values = null;
  2641.     if( getAttribute(element,prop))        
  2642.         values = getAttribute(element, prop );    
  2643.     else if( getAttribute( element, "currentStyle" )  && element.currentStyle.getAttribute)
  2644.         values = element.currentStyle.getAttribute( prop );
  2645.     else  if (element.style.getAttribute)
  2646.         values = element.style.getAttribute( prop );
  2647.         
  2648.     if( !values )
  2649.         return;
  2650.     
  2651.     var functions = new Array();
  2652.     var nIdx = 0, nStart = 0;
  2653.     var nNext = values.indexOf( "\)", 0);
  2654.     while( nNext >= 0 && nNext < values.length )
  2655.     {
  2656.         functions[nIdx] = values.substr( nStart, nNext-nStart+1);
  2657.         nStart = nNext + 1;
  2658.         nIdx++;
  2659.         nNext = values.indexOf( "\)", nStart);
  2660.     }
  2661.         
  2662.     for( var i=0; i<functions.length; i++)
  2663.     {
  2664.         var id = getAttribute(element, "id" );
  2665.         var translatedProp = TranslateProp(prop);
  2666.  
  2667.         var lp = functions[i].indexOf( "(" );
  2668.         var fnname = functions[i].substring(0, lp);
  2669.         var srcargs = functions[i].substring(lp+1, functions[i].length-1);
  2670.         
  2671.         var nClickTimes = 1;
  2672.         var arrForClickCount = srcargs.split( "," );
  2673.         for( var j = 0; j < arrForClickCount.length; j++ )
  2674.         {// to locate and get the "clicks=99" settings
  2675.             var nPageClick = arrForClickCount[j].indexOf("clicks");
  2676.             if( nPageClick >= 0 )
  2677.             {
  2678.                 nPageClick = arrForClickCount[j].indexOf("=");
  2679.                 if( nPageClick > 0 )
  2680.                 {
  2681.                     nClickTimes = arrForClickCount[j].substring( nPageClick + 1, arrForClickCount[j].length) * 1;
  2682.                     break;
  2683.                 }
  2684.             }
  2685.         }
  2686.         var args = srcargs;
  2687.         if( j < arrForClickCount.length )
  2688.         {// to strip out the "clicks=99" from the arguments string
  2689.             args = "";
  2690.             for( var k = 0; k < arrForClickCount.length; k ++ )
  2691.             {
  2692.                 if( k != j )
  2693.                 {
  2694.                     args += arrForClickCount[k];
  2695.                     if( k < arrForClickCount.length - 1 )
  2696.                         args += ",";
  2697.                 }
  2698.             }
  2699.         }
  2700.         bsscFXInit( null, id, translatedProp, fnname, args, nClickTimes );
  2701.     }
  2702. }
  2703.  
  2704. function kadovInitEffect( element, prop )
  2705. {
  2706.     InitEffect( element, prop );
  2707. }
  2708.  
  2709. function TranslateProp( prop )
  2710. {
  2711.     switch( prop )
  2712.     {
  2713.     case "x-on-hover" :     return "bsschover";
  2714.     case "x-on-pageclick" : return "bsscpageclick";
  2715.     case "x-on-pageload" :  return "bsscpageload";
  2716.     case "x-on-trigger-1" : return "bssctrigger1";
  2717.     case "x-on-trigger-2" : return "bssctrigger2";
  2718.     }
  2719.     return null;
  2720. }
  2721.  
  2722. function kadovTranslateProp( prop )
  2723. {
  2724.     return TranslateProp( prop );
  2725. }
  2726.  
  2727. //End to convert iWrite format to RoboEditor Format for DHTML effects
  2728.  
  2729. //Begin the definition of one entry to DHTML effects
  2730. function bsscFXInit( trigger_ID, target_ID, event_type, 
  2731.     action_type, action_setting, event_addional )
  2732. {
  2733.     //if( typeof(target_ID) != "string" )//MUST have a target_ID
  2734.     //    return; // we don't support Navigator yet
  2735.     
  2736.     if( typeof(event_type) == "string" )
  2737.         event_type = event_type.toLowerCase();
  2738.     if( typeof(action_type) == "string" )
  2739.         action_type = action_type.toLowerCase();
  2740.     if( typeof(action_setting) == "string" )
  2741.          action_setting = action_setting.toLowerCase();
  2742.     
  2743.     // to get the target element then add it to the target list
  2744.     var eleTarget = CCSSP.GetObject( target_ID );
  2745.     if( (eleTarget != null) && (event_type != null) && (action_type != null) )
  2746.     {
  2747.         
  2748.         CEngine.AddOneTarget( target_ID, eleTarget );
  2749.         CEngine.BuildTargetObject(target_ID, event_type, action_type, action_setting, event_addional);
  2750.     }
  2751.     
  2752.     // to validate the trigger_ID parameter
  2753.     if( typeof(trigger_ID) == "string" && trigger_ID != "" )
  2754.         CEngine.BuildTriggerObject( trigger_ID, target_ID );
  2755. }    
  2756. //End the definition of one entry to DHTML effects
  2757.  
  2758. /// Section End  - DHTM (JavaScript 1.2)
  2759.  
  2760. /// Section Begin  - CCSSP DHTM (JavaScript 1.2)
  2761.  
  2762. //Begin JavaScript libary for cross-platform positioning object.
  2763. function CCSSP(){} // constructor of CCSSP class
  2764.  
  2765. CCSSP.GetObject = function( obj )
  2766. {//convert object name string or reference into a valid object reference
  2767.     if( typeof(obj) == "object" )
  2768.         return obj;
  2769.     else if( typeof(obj) == "string" && obj != "")
  2770.     {
  2771.         if (gbBsNS6)
  2772.             return getElement(obj);    
  2773.         else if( gbBsNS4 )
  2774.             return eval("document." + obj);
  2775.         else
  2776.             return eval("document.all(\"" + obj + "\")");
  2777.     }
  2778.     else
  2779.         return null;
  2780. }
  2781.  
  2782. CCSSP.MoveObjectTo = function(obj, x, y)
  2783. {//positioning an object at a specific pixel coordinate
  2784.     if( gbBsNS4 && !gbBsNS6) 
  2785.         obj.moveTo(x,y);
  2786.     else
  2787.     {
  2788.         if (x == '')
  2789.             x = 0 ;
  2790.         if (y == '')
  2791.             y = 0 ;
  2792.         obj.style.left = parseInt(x) + 'px';
  2793.         obj.style.top = parseInt(y) + 'px'; 
  2794.     }
  2795. }
  2796.  
  2797. CCSSP.SetTimer = function(obj, timeout)
  2798. {
  2799.     if( obj.timer == null )
  2800.     {
  2801.         if(gbAIR)
  2802.         {
  2803.             obj.timer = setInterval(function(){CEngine.PerformAnimation( obj.aniIndex)}, timeout );
  2804.         }
  2805.         else
  2806.             obj.timer = setInterval("CEngine.PerformAnimation(" + obj.aniIndex + ")", timeout );
  2807.     }
  2808. }
  2809.  
  2810.  
  2811. CCSSP.MoveObjectBy = function(obj, dx, dy)
  2812. {//moveing a object by x and/or y pixel
  2813.     if (gbBsNS6)
  2814.     {
  2815.         var left = parseInt(obj.style.left);
  2816.         obj.style.setProperty('left',(left + dx ) + 'px',0) ;
  2817.         var top =  parseInt(obj.style.top);
  2818.         obj.style.setProperty('top' , (top + dy) + 'px' ,0);
  2819.     }
  2820.     else if( gbBsNS4 )
  2821.         obj.moveBy(dx,dy);
  2822.     else
  2823.     {
  2824.         obj.style.pixelLeft += dx;
  2825.         obj.style.pixelTop += dy;
  2826.     }
  2827. }
  2828.  
  2829. CCSSP.SetObjectBGColor = function(obj, color)
  2830. {//set the background color of an object
  2831.     if  (gbBsNS6)
  2832.         obj.style.setProperty( "background-color" , color , 0);
  2833.     else if( gbBsNS4 )
  2834.         obj.bgColor = color;
  2835.     else
  2836.         obj.style.backgroundColor = color;
  2837. }
  2838.  
  2839. CCSSP.ShowObject = function(obj, bShow)
  2840. {// set the object to be visible or invisible
  2841.     if (gbBsNS6)
  2842.         obj.style.setProperty('visibility', (bShow == true) ? 'visible' : 'hidden',null);
  2843.     else if( gbBsNS4 )
  2844.         obj.visibility = (bShow == true) ? 'show' : 'hide';
  2845.     else
  2846.         obj.style.visibility = (bShow == true) ? 'visible' : 'hidden';// when hidden, it still occupy some space.
  2847. }
  2848.  
  2849. CCSSP.GetObjectLeft = function(obj)
  2850. {// retrieve the x coordinate of a posionable object
  2851.     if (gbBsNS6)
  2852.         return obj.style.left ;
  2853.     else if( gbBsNS4 )
  2854.         return obj.left;
  2855.     else
  2856.         return obj.style.pixelLeft;
  2857. }
  2858.  
  2859. CCSSP.GetObjectTop = function(obj)
  2860. {// retrieve the y coordinate of a posionable object
  2861.     if (gbBsNS6)
  2862.         return obj.style.top ;
  2863.     else if( gbBsNS4 )
  2864.         return obj.top;
  2865.     else
  2866.         return obj.style.pixelTop;
  2867. }
  2868.  
  2869. CCSSP.GetObjectContainLeft = function(obj)
  2870. {// retrieve the x coordinate of a posionable object relative to it's parent element
  2871.     if( typeof(obj.pageX) != 'undefined')
  2872.         return obj.pageX;
  2873.     else if( typeof(obj.clientLeft) != 'undefined' )
  2874.         return obj.clientLeft;
  2875.     else
  2876.         return obj.offsetLeft;    
  2877. }
  2878.  
  2879. CCSSP.GetObjectWindowLeft = function(obj)
  2880. {// retrieve the x coordinate of a posionable object relative to browser window
  2881.     if( gbBsNS4 && !gbBsNS6)
  2882.         return obj.pageX;
  2883.     else
  2884.     {
  2885.         var nOffsetWindowLeft = 0;
  2886.         for(var element = obj; element; element = element.offsetParent)
  2887.             nOffsetWindowLeft += CCSSP.GetObjectContainLeft(element);
  2888.         return nOffsetWindowLeft;
  2889.     }
  2890. }
  2891.  
  2892. CCSSP.GetObjectContainTop = function(obj)
  2893. {// retrieve the y coordinate of a posionable object relative to it's parent element
  2894.     if( typeof(obj.pageY) != 'undefined')
  2895.         return obj.pageY;
  2896.     else if( typeof(obj.clientTop) != 'undefined' && obj == document.body)
  2897.         return obj.clientTop;
  2898.     else
  2899.         return obj.offsetTop;    
  2900. }
  2901.  
  2902. CCSSP.GetObjectWindowTop = function(obj)
  2903. {// retrieve the y coordinate of a posionable object relative to browser window
  2904.     if( gbBsNS4 && !gbBsNS6)
  2905.         return obj.pageY;
  2906.     else
  2907.     {
  2908.         var nOffsetWindowTop = 0;
  2909.         for(var element = obj; element; element = element.offsetParent)
  2910.             nOffsetWindowTop += CCSSP.GetObjectContainTop(element);
  2911.         return nOffsetWindowTop;
  2912.     }
  2913. }
  2914.  
  2915. CCSSP.GetObjectHeight = function(obj)
  2916. {// retrieve the height of a posionable object
  2917.     if( gbBsNS4 && !gbBsNS6)
  2918.         return obj.clip.height;
  2919.     else
  2920.         return obj.offsetHeight;
  2921. }
  2922.  
  2923. CCSSP.GetObjectWidth = function(obj)
  2924. {// retrieve the width of a posionable object
  2925.     if( gbBsNS4 && !gbBsNS6)
  2926.         return obj.clip.width;
  2927.     else
  2928.         return obj.offsetWidth;
  2929. }
  2930.  
  2931. CCSSP.RegisterEventHandler = function( srcObj, rawEventName, funcHandler )
  2932. { // to add the "funcHandler" as the "rawEventName" 's handler to the "srcObj" object,the original event handler will be combined
  2933.     if (gbBsNS4 && !gbBsNS6)
  2934.         return ;
  2935.         
  2936.     var oldHandler = "";
  2937.  
  2938.     if (gbBsMac &&gbBsIE4&&!gbBsIE5)
  2939.     {
  2940.         if (typeof(srcObj[rawEventName.toLowerCase()])=="unknown")
  2941.         { //search for <SCRIPT> tag which define the event handler
  2942.             for( var i = 0; i < document.scripts.length; i++ ) 
  2943.             {
  2944.                 var script = document.scripts[i];
  2945.                 if( (script.htmlFor == srcObj.id || script.htmlFor == srcObj ) && script.event == rawEventName )
  2946.                 {
  2947.                     oldHandler = script.innerHTML;
  2948.                     break;
  2949.                 }
  2950.             }
  2951.         }
  2952.     }
  2953.     else
  2954.     {
  2955.         var oldInlineHandler = srcObj[rawEventName.toLowerCase()];
  2956.         if( oldInlineHandler != null && typeof(oldInlineHandler) != "undefined")
  2957.         {
  2958.             var functionDefinition = oldInlineHandler.toString();
  2959.             var bodyStart = functionDefinition.indexOf( "{" );
  2960.             var bodyEnd = functionDefinition.lastIndexOf( "}" );
  2961.             if( bodyStart > 0 || bodyEnd > bodyStart )
  2962.                 oldHandler = functionDefinition.substr( bodyStart + 1, bodyEnd - bodyStart - 2 );
  2963.         }
  2964.         else if( gbBsIE4 )
  2965.         { //search for <SCRIPT> tag which define the event handler
  2966.             for( var i = 0; i < document.scripts.length; i++ ) 
  2967.             {
  2968.                 var script = document.scripts[i];
  2969.                 if( (script.htmlFor == srcObj.id || script.htmlFor == srcObj ) && script.event == rawEventName )
  2970.                 {
  2971.                     oldHandler = script.innerHTML;
  2972.                     break;
  2973.                 }
  2974.             }
  2975.         }
  2976.     }
  2977.     if( oldHandler.indexOf(funcHandler) >= 0 )
  2978.         return;// to prevent register the funtion twice.
  2979.  
  2980.     if( gbBsNS4 ) // only "onload, onresize, onfocus" apply to window
  2981.     {// other raw events will apply to layer
  2982.         var noOn = rawEventName.substring(2, rawEventName.length);
  2983.         if( typeof(noOn) == "string" && noOn.length > 3 ) {
  2984.             if (srcObj.captureEvents)
  2985.                 srcObj.captureEvents( Event[noOn.toUpperCase()] );
  2986.         }
  2987.     }
  2988.     
  2989.     var newHandler = oldHandler;
  2990.     if( newHandler.length == 0 )
  2991.         newHandler = funcHandler;
  2992.     else
  2993.         newHandler += "; " + funcHandler;    
  2994.     if ((gbBsNS6)&&(srcObj.addEventListener))
  2995.         srcObj.addEventListener( noOn.toLowerCase(), new Function("event", newHandler ),false);
  2996.     else
  2997.         srcObj[rawEventName.toLowerCase()] = new Function( newHandler );    
  2998. }
  2999.  
  3000. CCSSP.GetWindowHeight = function()
  3001. {// retrieve the height of available content in browser window
  3002.     if( gbBsNS4 )
  3003.         return window.innerHeight;
  3004.     else
  3005.         return document.body.clientHeight;
  3006. }
  3007.  
  3008. CCSSP.GetWindowBottom = function()
  3009. {// retrieve the bottom postion of browser window
  3010.     if( gbBsNS4 )
  3011.         return window.outerHeight + window.pageYOffset;
  3012.     else
  3013.         return document.body.clientHeight + getScrollTop();
  3014. }
  3015.  
  3016. CCSSP.GetWindowWidth = function()
  3017. {// retrieve the width of available content in browser window
  3018.     if( gbBsNS4 )
  3019.         return window.innerWidth;
  3020.     else
  3021.         return document.body.clientWidth;
  3022. }
  3023.  
  3024. CCSSP.GetWindowRight = function()
  3025. {// retrieve the right postion of browser window
  3026.     if( gbBsNS4 )
  3027.         return window.outerWidth + window.pageXOffset;
  3028.     else
  3029.         return document.body.clientWidth + getScrollLeft();
  3030. }
  3031.  
  3032. CCSSP.TrimString = function( objString, subtrim )
  3033. {// to trim the "subtrim" in the beginning and ending of a string object
  3034.     if( typeof(subtrim) != "string" || subtrim == null )
  3035.         return objString;
  3036.     var strHead = objString.substring(0, 1);
  3037.     var strRear = objString.substring(objString.length-1, objString.length);
  3038.     if( strHead != subtrim && strRear != subtrim )
  3039.         return objString;
  3040.     
  3041.     var spacePos = objString.indexOf(subtrim);
  3042.     if( spacePos < 0 )
  3043.         return objString;
  3044.     else if( spacePos == objString.length - 1 )
  3045.         return objString.substring(0, spacePos);
  3046.     else
  3047.     {
  3048.         var newString = objString.substring( spacePos + 1, objString.length);
  3049.         return CCSSP.TrimString( newString, subtrim );
  3050.     }
  3051. }
  3052.  
  3053. CCSSP.TrimSpace = function( objString )
  3054. {
  3055.     var Trim1 = CCSSP.TrimString( objString, " ");
  3056.     if( typeof(Trim1) != "string" || Trim1 == null )
  3057.         return Trim1;
  3058.     var strHead = Trim1.substring(0, 1);
  3059.     if(strHead == "\"")
  3060.         return CCSSP.TrimString( Trim1, "\"");
  3061.     return CCSSP.TrimString( Trim1, "\'");
  3062. }
  3063.  
  3064. CCSSP.GetEventElement = function( navEventObject )
  3065. {// to get the element who fired the current event
  3066.     if(gbBsNS4) 
  3067.         return navEventObject.target;
  3068.     else
  3069.         return event.srcElement;
  3070. }
  3071.  
  3072. CCSSP.PrepareFilter = function( Obj )
  3073. {//to prepare for making the filter work
  3074.     Obj.style.filter = "";
  3075.     if(Obj.style.position == "absolute" )
  3076.         return;
  3077.     if(gbBsIE7)
  3078.     {
  3079.         if( Obj.style.zoom != "")
  3080.             return;
  3081.         Obj.style.zoom = 1;
  3082.     }
  3083.     else
  3084.     {
  3085.         if(Obj.style.width != "" || Obj.style.height != "")
  3086.             return;
  3087.         Obj.style.height = CCSSP.GetObjectHeight(Obj);
  3088.     }
  3089. }
  3090.  
  3091. CCSSP.IsDescendant = function( progenitor, progeny )
  3092. {
  3093.     if( typeof(progeny) == "undefined" || progeny == null )
  3094.         return false;
  3095.     else if( progeny == progenitor )
  3096.         return true; 
  3097.     else if( progeny.id == progenitor.id ) 
  3098.         return true; 
  3099.     else if( getParentNode(progeny) == getParentNode(progenitor))
  3100.         return false;
  3101.     else
  3102.         return CCSSP.IsDescendant( progenitor, getParentNode(progeny));
  3103. }
  3104.  
  3105. CCSSP.IsTextTag = function( Obj )
  3106. {
  3107.     if( typeof( Obj.tagName ) == "undefined" )
  3108.         return false;
  3109.     return( Obj.tagName.indexOf("H") == 0 || Obj.tagName == "P" || 
  3110.             Obj.tagName == "FONT" || Obj.tagName == "SPAN" );
  3111. }
  3112.  
  3113. //End JavaScript libary for cross-platform positioning object.
  3114.  
  3115. /// Section End  - CCSSP DHTM (JavaScript 1.2)
  3116.  
  3117. /// Section Begin  - CCSSP DHTM 1 (JavaScript 1.2)
  3118.  
  3119. //Begin the definition of class CTrigger
  3120. function CTrigger( TriggerElement )
  3121. {
  3122.     // object : the trigger element. Never be null. 
  3123.     this.eleTrigger = TriggerElement;
  3124.     
  3125.     // number : the click counter number: only 3 values: 0,1,2;
  3126.     this.nCounter = 0; 
  3127.     
  3128.     //object as associative array of string:
  3129.     // the associate target ID strings; one element at least.            
  3130.     this.objStrTarget = new Object();
  3131.     this.eleTrigger.style.cursor = "pointer";
  3132.     if( this.eleTrigger.tagName == "AREA" && getAttribute(this.eleTrigger,"href") == "" )
  3133.         setAttribute(this.eleTrigger , "href", "#"); // to make a hand cursor for image map
  3134. }
  3135.  
  3136. CTrigger.prototype.AddTargetID = function( strTargetID )
  3137. {// add one target ID string to the objStrTarget
  3138.     if( typeof(strTargetID) != "string" )
  3139.         return ;
  3140.     if( typeof(this.objStrTarget[strTargetID]) != "string" )
  3141.         this.objStrTarget[strTargetID] = strTargetID;
  3142. }
  3143.  
  3144. CTrigger.prototype.OnTriggerClick = function(event)
  3145. {// to activate all asociated target
  3146.     var strEventType = ( (this.nCounter++)% 2 == 0 ) ? 
  3147.         "bssctrigger1" : "bssctrigger2";
  3148.         
  3149.     // to enumerate associative target element's ID string
  3150.     for( var strTargetID in this.objStrTarget ) 
  3151.         CEngine.SendEventToOneTarget( strTargetID, strEventType ,event);
  3152. }
  3153. //End the definition of class CTrigger
  3154.  
  3155. //Begin the definition of class CTarget
  3156. function CTarget( TargetElement )
  3157. {
  3158.     // object : the target element. Never be null.
  3159.     this.eleTarget = TargetElement;
  3160.     this.objManager = new Object(); // object: the event manager
  3161.  
  3162. CTarget.nPageClickCounter = 0;// static class property.
  3163.  
  3164. CTarget.prototype.GetAgencyObject = function(str_action_type,action_setting )
  3165. {// return the action agency ( effect )object's refernece 
  3166.     switch( str_action_type )
  3167.     {
  3168.     case "show":return new CAgencyShow( this.eleTarget, true ) ;
  3169.     case "hide":return new CAgencyShow( this.eleTarget, false ) ;
  3170.  
  3171.     case "flyin" : 
  3172.         return new CAgencyFly(this.eleTarget, action_setting, true);
  3173.     case "flyout" : 
  3174.         return new CAgencyFly(this.eleTarget, action_setting, false);
  3175.     case "spiralin" : 
  3176.         return new CAgencySpiral(this.eleTarget, action_setting, true);
  3177.     case "spiralout" : 
  3178.         return new CAgencySpiral(this.eleTarget, action_setting, false);
  3179.     case "zoomin" :
  3180.         return new CAgencyZoom(this.eleTarget, action_setting, true);
  3181.     case "zoomout" : 
  3182.         return new CAgencyZoom(this.eleTarget, action_setting, false);
  3183.     case "elastic" : 
  3184.         return new CAgencyElastic(this.eleTarget, action_setting);
  3185.         
  3186.     case "fadein" : 
  3187.         return new CAgencyAlpha(this.eleTarget, action_setting, true) ;
  3188.     case "fadeout" :
  3189.         return new CAgencyAlpha(this.eleTarget, action_setting, false) ;
  3190.     case "rockrollstatic" :
  3191.     case "rockroll" :
  3192.         return  new CAgencyWave(this.eleTarget, action_setting, false) ;
  3193.  
  3194.     case "glow":
  3195.         return  new CAgencyGlow(this.eleTarget,action_setting);
  3196.     case "dropshadow":
  3197.         return new CAgencyDropShadow(this.eleTarget,action_setting);
  3198.     case "transition" :
  3199.         return new CAgencyRevealTrans(this.eleTarget,action_setting) ;
  3200.     case "blur" :
  3201.         return  new CAgencyBlur(this.eleTarget,action_setting) ;
  3202.  
  3203.     case "fliph" : // all these 4 do NOT need any parameters
  3204.     case "flipv" :
  3205.     case "invert":
  3206.     case "gray" :
  3207.         return new CAgencyChangeFilter(this.eleTarget, str_action_type) ;
  3208.     
  3209.     case "fontchange": // the effects below change the style on the fly, so won't work in Navigator
  3210.         return new CAgencyFontChange(this.eleTarget,action_setting) ;
  3211.     case "boderchange": 
  3212.     case "stylechange":
  3213.         return new CAgencyChangeStyle(this.eleTarget,action_setting);
  3214.  
  3215.     default: return null;
  3216.     }
  3217. }
  3218.  
  3219. CTarget.prototype.SetEventManager = function( 
  3220.     one_event_type,str_action_type,action_setting,event_additional)
  3221. {// to set the event manager with specified action 
  3222.     if( typeof( one_event_type ) != "string" ||    
  3223.         typeof( str_action_type ) != "string"||
  3224.         typeof( action_setting ) != "string" )
  3225.         return false;
  3226.     if( typeof(this.objManager[one_event_type]) == "undefined" )
  3227.     {
  3228.         this.objManager[one_event_type] = new Object();
  3229.         this.objManager[one_event_type].length = 0;
  3230.     }
  3231.     
  3232.     var eventAgency = this.GetAgencyObject(str_action_type,action_setting);
  3233.     if( eventAgency != null )
  3234.     {
  3235.         var ct = this.objManager[one_event_type].length ++;
  3236.         this.objManager[one_event_type][ct] = eventAgency;
  3237.         
  3238.         if( one_event_type == "bsscpageclick" )
  3239.         {// to deal with the "number of pageclick" stuff
  3240.             if( typeof(event_additional) == "number" )
  3241.                 this.objManager[one_event_type][ct].nPageClick = event_additional;
  3242.             else // set the default number 
  3243.                 this.objManager[one_event_type][ct].nPageClick = 1;
  3244.             
  3245.             if( (typeof(this.objManager.nMinPageClickIndex) == "undefined") ||
  3246.                 (this.objManager[one_event_type][ct].nPageClick < 
  3247.                     this.objManager[one_event_type][this.objManager.nMinPageClickIndex].nPageClick) )
  3248.                 this.objManager.nMinPageClickIndex = ct;
  3249.         }
  3250.         
  3251.         //hide the object blindly,SetState function will take care of the final correct state
  3252.         if( ((one_event_type == "bsscpageclick") && 
  3253.              (this.objManager[one_event_type][ct].nPageClick == 1)) ||
  3254.             one_event_type == "bsscpageload" ||
  3255.             one_event_type == "bssctrigger1" )
  3256.             CCSSP.ShowObject( this.eleTarget, false );
  3257.         
  3258.         if( one_event_type == "bssctrigger1" || one_event_type == "bssctrigger2" )
  3259.             if( typeof( this.strTriggerEvent ) == "undefined" )
  3260.                 this.strTriggerEvent = ( one_event_type == "bssctrigger1" ) ? "bssctrigger2" : "bssctrigger1";
  3261.             
  3262.         return true;
  3263.     }
  3264.     return false;
  3265. }
  3266.  
  3267. CTarget.prototype.OnEvent = function( strBsscEvent,event )
  3268. {// response to the event ( bssc format )
  3269.     if( typeof(this.objManager[strBsscEvent]) == "object" )
  3270.     { // to get the event agency from the event manager
  3271.         var eventAgency = this.objManager[strBsscEvent];
  3272.         for( var i = 0; i < eventAgency.length; i++ )
  3273.         {
  3274.             if( strBsscEvent == "bsscpageclick" && 
  3275.                  eventAgency[i].nPageClick != CTarget.nPageClickCounter )
  3276.                  continue;
  3277.             else if( strBsscEvent == "bsschover" && event.type == "mouseout" )
  3278.                 eventAgency[i].EndEffect();
  3279.             else // to invoke the unified function in effect object    
  3280.                 eventAgency[i].UpdateEffect(); 
  3281.         }
  3282.     }
  3283. }
  3284.  
  3285. CTarget.prototype.SetState = function( strBsscEvent )
  3286. {
  3287.     if( typeof(this.objManager[strBsscEvent]) != "object" )
  3288.         return false;
  3289.  
  3290.     // to get the event agency from the event manager
  3291.     var eventAgency = this.objManager[strBsscEvent];
  3292.     
  3293.     if( strBsscEvent == "bsscpageclick" )
  3294.     {// we only set the initial state for the minium number of pageclick 
  3295.         if (this.objManager.nMinPageClickIndex == 'undefined')
  3296.             this.objManager.nMinPageClickIndex = 0 ;
  3297.         eventAgency[this.objManager.nMinPageClickIndex].PrepareEffect();
  3298.         return true;
  3299.     }
  3300.     else
  3301.     {
  3302.         for( var i = 0; i < eventAgency.length; i++ )
  3303.             eventAgency[i].PrepareEffect(); // to invoke the unified function in effect object     
  3304.         if( i > 0 )
  3305.             return true;
  3306.         else
  3307.             return false;
  3308.     }
  3309. }
  3310. //End the definition of class CTarget
  3311.  
  3312. //Begin the definition of CEngine class
  3313. function CEngine(){}// all properities are going be "class" properities
  3314.  
  3315. // object : as associative array of trigger objects
  3316. CEngine.objTrigger = new Object();
  3317. // object : as associative array of target objects 
  3318. CEngine.objTarget = new Object(); 
  3319.  
  3320. // Array : each element is a CAgencyXXX animation object
  3321. CEngine.arrAnimation = new Array();
  3322. CEngine.PerformAnimation = function( nIndex )
  3323. {// animation : update effects function
  3324.     CEngine.arrAnimation[nIndex].UpdateEffect();
  3325. }
  3326.  
  3327. CEngine.AddOneTrigger = function(TriggerID,TriggerElement)
  3328. {// add one Trigger object into the trigger array
  3329.     if( typeof(TriggerID) != "string" || TriggerElement == null ||
  3330.         typeof(TriggerElement) != "object" )
  3331.         return;
  3332.     if( typeof(CEngine.objTrigger[TriggerID] ) != "object" )
  3333.         CEngine.objTrigger[TriggerID] = new CTrigger(TriggerElement);
  3334. }
  3335.     
  3336. CEngine.AddOneTarget = function(TargetID, TargetElement)
  3337. {// add one Target object into the target array
  3338.     if( typeof(TargetID) != "string" || TargetElement == null ||
  3339.         typeof(TargetElement) != "object" )
  3340.         return;
  3341.     if( typeof(CEngine.objTarget[TargetID]) != "object" )
  3342.         CEngine.objTarget[TargetID] = new CTarget( TargetElement );    
  3343. }
  3344.  
  3345. CEngine.SendEventToOneTarget = function(strTargetID, strBsscEvent,event )
  3346. {// to activate one target object
  3347.     if( typeof(CEngine.objTarget[strTargetID]) == "object" ) 
  3348.     {
  3349.         if( strBsscEvent == "bssctrigger1" || strBsscEvent == "bssctrigger2" )
  3350.         {//now, the "bssctrigger1" and "bssctrigger2" work like a toggle
  3351.             if( strBsscEvent == CEngine.objTarget[strTargetID].strTriggerEvent )
  3352.                 strBsscEvent = (strBsscEvent == "bssctrigger1") ? "bssctrigger2" : "bssctrigger1";
  3353.             CEngine.objTarget[strTargetID].strTriggerEvent = strBsscEvent;
  3354.         }
  3355.         CEngine.objTarget[strTargetID].OnEvent( strBsscEvent,event );
  3356.     }
  3357. }
  3358.  
  3359. CEngine.SendEventToAllTarget = function( strBsscEvent,event )
  3360. { //to activate all target associative to the BSSC event
  3361.     for( var strTargetID in CEngine.objTarget ) //to enumerate all target
  3362.         CEngine.SendEventToOneTarget( strTargetID, strBsscEvent,event );
  3363. }
  3364.  
  3365. CEngine.SetOneTargetInitialState = function( strTargetID )
  3366. {// only invoked after ALL effects for the target have been set
  3367.     if( typeof(CEngine.objTarget[strTargetID]) == "object" ) 
  3368.     {// to get target object
  3369.         var objTarget = CEngine.objTarget[strTargetID];
  3370.         if( objTarget.SetState( "bsscpageload" ) == false )
  3371.         {
  3372.             objTarget.SetState( "bsscpageclick" );
  3373.             objTarget.SetState( "bssctrigger1" );
  3374.         }
  3375.     }
  3376. }
  3377.  
  3378. CEngine.AdjustPageClickCounter = function()
  3379. {
  3380.     var nAdjustedClickCounter = CTarget.nPageClickCounter;
  3381.     var bAdjusted = false;
  3382.     for( var strTargetID in CEngine.objTarget ) //to enumerate all target
  3383.     {// try to find the minum pageCliclConter greater than CTarget.nPageClickCounter
  3384.         var objEventPageClick = CEngine.objTarget[strTargetID].objManager.bsscpageclick;
  3385.         if( objEventPageClick != null )
  3386.         {
  3387.             for( var i = 0; i < objEventPageClick.length; i++ )
  3388.             {
  3389.                 var nOtherPageClick = objEventPageClick[i].nPageClick;
  3390.                 if( nOtherPageClick == CTarget.nPageClickCounter )
  3391.                     return;
  3392.                 if( nOtherPageClick > CTarget.nPageClickCounter )
  3393.                 {
  3394.                     if( !bAdjusted )
  3395.                     {
  3396.                         nAdjustedClickCounter = nOtherPageClick;
  3397.                         bAdjusted = true;
  3398.                     }
  3399.                     else if( nOtherPageClick < nAdjustedClickCounter )
  3400.                         nAdjustedClickCounter = nOtherPageClick;
  3401.                 }
  3402.             }
  3403.         }
  3404.     }
  3405.     CTarget.nPageClickCounter = nAdjustedClickCounter;
  3406. }
  3407.  
  3408. CEngine.OnPageLoad = function(event)
  3409. {     
  3410.     // first, to set all target's initial state
  3411.     for( var strTargetID in CEngine.objTarget )
  3412.         CEngine.SetOneTargetInitialState( strTargetID );
  3413.     
  3414.     // to invoke all target's onpageload handler
  3415.     CEngine.SendEventToAllTarget( "bsscpageload",event );
  3416. }
  3417.  
  3418. CEngine.OnPageClick = function(event)
  3419. { // to invoke all target's onpageclick handler
  3420.        var src = CCSSP.GetEventElement( arguments[0] );
  3421.        if( src == null )
  3422.         return;
  3423.         
  3424.     var objClickedTrigger = null;
  3425.     for( var strTriggerID in CEngine.objTrigger )
  3426.     { // to detect which trigger is clicked
  3427.         if( CCSSP.IsDescendant( CEngine.objTrigger[strTriggerID].eleTrigger,src) )
  3428.         {
  3429.             objClickedTrigger = CEngine.objTrigger[strTriggerID];
  3430.             break;
  3431.         }
  3432.     }
  3433.     
  3434.     if( objClickedTrigger != null) // the clicked trigger found
  3435.         objClickedTrigger.OnTriggerClick(event);
  3436.     else // no trigger is clicked
  3437.     { // to send PageClick event to all target
  3438.         CTarget.nPageClickCounter++;
  3439.         CEngine.AdjustPageClickCounter();
  3440.         CEngine.SendEventToAllTarget( "bsscpageclick" ,event);
  3441.     }
  3442. }    
  3443.  
  3444. CEngine.OnMouseOver = function(event)
  3445. { // to invoke all target's onpageload handler
  3446.     var src = CCSSP.GetEventElement( arguments[0] );
  3447.     if( src == null )
  3448.         return;
  3449.         
  3450.     var strHoveredTargetID = null;
  3451.     for( var strTargetID in CEngine.objTarget )
  3452.     { // to detect which Target is hovering on
  3453.         if( CCSSP.IsDescendant( CEngine.objTarget[strTargetID].eleTarget, src ) )
  3454.         {
  3455.             strHoveredTargetID = strTargetID;
  3456.             break;
  3457.         }
  3458.     }
  3459.     
  3460.     if( strHoveredTargetID != null ) // the hovered target found
  3461.         CEngine.SendEventToOneTarget( strHoveredTargetID, "bsschover",event );
  3462. }
  3463.  
  3464. CEngine.BuildTargetObject = function(target_ID,event_type,action_type,
  3465.             action_setting, event_additional)
  3466. {// to build target object 
  3467.     // to get the target object
  3468.     if( typeof( CEngine.objTarget[target_ID] ) != "object" )
  3469.         return false;// the engine's AddOneTarget function might have failed.
  3470.     var TargetObject = CEngine.objTarget[target_ID];
  3471.     
  3472.     // to prepare the parameters for the event manager
  3473.     var arrEvent = event_type.split("|"); // to split the combined event_type string
  3474.     var arrAction = action_type.split("|");//to split the combined action_type string
  3475.     for( var trim = 0; trim < arrEvent.length; trim++ )
  3476.         arrEvent[trim] = CCSSP.TrimSpace(arrEvent[trim]);
  3477.     
  3478.     for( trim = 0; trim < arrAction.length; trim++ )
  3479.         arrAction[trim] = CCSSP.TrimSpace(arrAction[trim]);
  3480.     
  3481.     var arrSetting = new Array(); 
  3482.     if( typeof(action_setting) == "string" )
  3483.         arrSetting = action_setting.split("|");// to split the combined action_setting string
  3484.     // to calibrate the arrays
  3485.     for( var i = arrSetting.length; i < arrAction.length; i++ )
  3486.     {
  3487.         if( typeof(arrSetting[i]) != "string" )
  3488.              arrSetting[i] = "";
  3489.     }                 
  3490.  
  3491.     // to prepare for dealing with the absolute posioning element
  3492.     TargetObject.eleTarget.ABSX = CCSSP.GetObjectLeft( TargetObject.eleTarget );
  3493.     TargetObject.eleTarget.ABSY = CCSSP.GetObjectTop( TargetObject.eleTarget );
  3494.  
  3495.     if( arrEvent.length > 1 )
  3496.     {// if event is combined, it must be : "bssctrigger1 | bssctrigger2"
  3497.         if( arrAction.length != 2 )
  3498.             return false; // if event is combined, there must be 2 actions
  3499.         for( i = 0 ; i < 2; i++ )
  3500.         {
  3501.             if( TargetObject.SetEventManager(arrEvent[i], arrAction[i], 
  3502.                 arrSetting[i], event_additional) == false )
  3503.                 return false; // the event manager has not been set up
  3504.         }
  3505.     }
  3506.     else // the event_type string is not combined
  3507.     {
  3508.         for( i = 0 ; i < arrAction.length; i++ )
  3509.         {
  3510.             TargetObject.SetEventManager(event_type, arrAction[i], arrSetting[i], event_additional);
  3511.             // to validate the event manager
  3512.             if( typeof(TargetObject.objManager[event_type]) != "object" ||
  3513.                     typeof(TargetObject.objManager[event_type][i]) != "object" )
  3514.                 return false; // the event manager has not been set up
  3515.         }
  3516.     }
  3517.     return true;
  3518. }
  3519.  
  3520. CEngine.BuildTriggerObject = function(trigger_ID, target_ID)
  3521. {// to build the trigger object
  3522.     var arrTrigger = trigger_ID.split("|"); // to split the combined trigger_ID string
  3523.     for( var i = 0; i < arrTrigger.length; i ++ )
  3524.     {// to get the trigger element then add it to the trigger list
  3525.         arrTrigger[i] = CCSSP.TrimSpace( arrTrigger[i] );
  3526.         var eleTrigger = CCSSP.GetObject( arrTrigger[i] );
  3527.         if( eleTrigger == null )
  3528.             continue; // the trigger_ID string in the HTML code maybe wrong
  3529.         CEngine.AddOneTrigger( arrTrigger[i], eleTrigger );
  3530.  
  3531.         // to get the target object
  3532.         if( typeof( this.objTrigger[arrTrigger[i]] ) != "object" )
  3533.             continue;// the engine's AddOneTarget function might have failed.
  3534.         CEngine.objTrigger[arrTrigger[i]].AddTargetID( target_ID );
  3535.     }
  3536. }
  3537. //End the definition of CEngine class
  3538.  
  3539. /// Section End  - CCSSP DHTM 1 (JavaScript 1.2)
  3540.  
  3541. /// Section Begin  - CCSSP DHTM 2 (JavaScript 1.2)
  3542.  
  3543. //Begin the definition of CAgencyXXXX classes
  3544.  
  3545. //Begin of the CAgencyShow definition
  3546. function CAgencyShow( element, bIsShow )
  3547. {
  3548.     this.ele = element;
  3549.     this.bIsShow = bIsShow;
  3550. }
  3551.  
  3552. CAgencyShow.prototype.PrepareEffect = function()
  3553. {
  3554.     CCSSP.ShowObject( this.ele, !this.bIsShow );
  3555. }
  3556.  
  3557. CAgencyShow.prototype.UpdateEffect = function()
  3558. {
  3559.     CCSSP.ShowObject( this.ele, this.bIsShow );
  3560. }
  3561.  
  3562. CAgencyShow.prototype.EndEffect = function()
  3563. {
  3564.     CCSSP.ShowObject( this.ele, !this.bIsShow );
  3565. }
  3566. // End of the CAgencyShow definition
  3567.  
  3568. // Begin of CAgencyFly definition
  3569. function CAgencyFly( element, settings, bIsIn )
  3570. {
  3571.     this.ele = element;
  3572.     this.bIsIn = bIsIn;
  3573.     this.duration = 1000; // default
  3574.     this.direction = "right";
  3575.  
  3576.     var arrAllSet = settings.split(",");
  3577.     for( var i = 0; i < arrAllSet.length; i ++ )
  3578.     {// to retrieve the setting
  3579.         arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);
  3580.         var arrOneSet = arrAllSet[i].split("=");
  3581.         for( var j = 0; j < arrOneSet.length; j++ )
  3582.             arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);
  3583.         switch( arrOneSet[0] )
  3584.         {
  3585.         case "speed" : this.duration = 100000/arrOneSet[1]; break;
  3586.         case "direction" : this.direction = arrOneSet[1]; break;
  3587.         }
  3588.     }
  3589.         
  3590.     if( this.ele.style.position != "absolute" )
  3591.         this.ele.style.position = "relative";
  3592.     this.timer = null;
  3593.     this.aniIndex = CEngine.arrAnimation.length;
  3594.     CEngine.arrAnimation[this.aniIndex] = this;
  3595. }
  3596.  
  3597. CAgencyFly.prototype.PrepareEffect = function()
  3598. {
  3599.     CCSSP.ShowObject(this.ele, !this.bIsIn );
  3600. }
  3601.  
  3602. CAgencyFly.prototype.UpdateEffect = function()
  3603. {
  3604.     if( this.timer == null )
  3605.         this.ResetParameters();
  3606.  
  3607.     var percent = ((new Date()).getTime() - this.startTime)/this.duration;
  3608.     if( percent >= 1.0 )
  3609.         this.EndEffect();
  3610.     else
  3611.     {
  3612.         var newX = this.startX*(1.0-percent) +  this.finalX*percent;
  3613.         var newY = this.startY*(1.0-percent) +  this.finalY*percent;
  3614.         CCSSP.MoveObjectTo(this.ele, newX, newY);
  3615.         CCSSP.SetTimer(this,20);
  3616.     }
  3617. }
  3618.  
  3619. CAgencyFly.prototype.EndEffect = function()
  3620. {
  3621.     clearInterval( this.timer );
  3622.     this.timer = null;
  3623.  
  3624.     if( this.bIsIn ) // FlyIn
  3625.         CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY);
  3626.     else // FlyOut
  3627.         CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);
  3628.     CCSSP.ShowObject(this.ele, this.bIsIn );
  3629. }
  3630.  
  3631. CAgencyFly.prototype.ResetParameters = function()
  3632. {
  3633.     this.PrepareEffect();
  3634.     CCSSP.ShowObject(this.ele, true );
  3635.  
  3636.     this.startX = 0;
  3637.     this.startY = 0;
  3638.     this.finalX = 0;
  3639.     this.finalY = 0; 
  3640.     
  3641.     var offsetLeft = CCSSP.GetObjectWindowLeft(this.ele) + this.ele.offsetWidth;
  3642.     var offsetTop = CCSSP.GetObjectWindowTop(this.ele) + this.ele.offsetHeight;
  3643.     var offsetRight = CCSSP.GetWindowRight();
  3644.     var offsetBottom = CCSSP.GetWindowBottom();
  3645.  
  3646.     if( this.bIsIn )
  3647.     { // FlyIn
  3648.         this.finalX = this.ele.ABSX;
  3649.         this.finalY = this.ele.ABSY;
  3650.  
  3651.         switch( this.direction )
  3652.         {
  3653.         case "right": this.startX = offsetRight; this.startY = this.finalY; break;
  3654.         case "left": this.startX = -offsetLeft;  this.startY = this.finalY; break;
  3655.         case "down": this.startY = offsetBottom; this.startX = this.finalX; break;
  3656.         case "up":  this.startY = -offsetTop;    this.startX = this.finalX; break;
  3657.         case "downright":
  3658.               this.startX = ( offsetBottom < offsetRight) ? offsetBottom : offsetRight;
  3659.             this.startY = this.startX;        break;
  3660.         case "upright":
  3661.               this.startX = (offsetTop < offsetRight)? offsetTop : offsetRight;
  3662.             this.startY = -this.startX;        break;
  3663.         case "upleft":
  3664.             this.startX = -((offsetTop < offsetRight)? offsetTop : offsetRight);
  3665.             this.startY = this.startX;        break;
  3666.         case "downleft":
  3667.             this.startX = -(( offsetBottom < offsetRight) ? offsetBottom : offsetRight);
  3668.             this.startY = -this.startX;     break;
  3669.         }
  3670.     }
  3671.     else
  3672.     { // FlyOut
  3673.         this.startX = this.ele.ABSX;
  3674.         this.startY = this.ele.ABSY;
  3675.  
  3676.         switch( this.direction )
  3677.         {
  3678.         case "right": this.finalX = offsetRight;  this.finalY = this.startY; break;
  3679.         case "left": this.finalX = -offsetLeft;   this.finalY = this.startY;  break;
  3680.         case "down": this.finalY = offsetBottom;  this.finalX = this.startX; break;
  3681.         case "up":  this.finalY = -offsetTop;     this.finalX = this.startX; break;
  3682.         case "downright":
  3683.               this.finalX = ( offsetBottom < offsetRight) ? offsetBottom : offsetRight;
  3684.             this.finalY = this.finalX;        break;
  3685.         case "upright":
  3686.               this.finalX = (offsetTop < offsetRight)? offsetTop : offsetRight;
  3687.             this.finalY = -this.finalX;        break;
  3688.         case "upleft":
  3689.             this.finalX = -((offsetTop < offsetRight)? offsetTop : offsetRight);
  3690.             this.finalY = this.finalX;        break;
  3691.         case "downleft":
  3692.             this.finalX = -(( offsetBottom < offsetRight) ? offsetBottom : offsetRight);
  3693.             this.finalY = -this.finalX;     break;
  3694.         }
  3695.     }
  3696.     CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);
  3697.     this.startTime = (new Date()).getTime();
  3698. }
  3699. // End of the CAgencyFly definition
  3700.  
  3701. // Begin of CAgencySpiral
  3702. function CAgencySpiral( element, settings, bIsIn )
  3703. {
  3704.     this.ele = element;
  3705.     this.bIsIn = bIsIn;
  3706.     this.duration = 1000; // default
  3707.  
  3708.     var arrAllSet = settings.split(",");
  3709.     for( var i = 0; i < arrAllSet.length; i ++ )
  3710.     {// to retrieve the setting
  3711.         arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);
  3712.         var arrOneSet = arrAllSet[i].split("=");
  3713.         for( var j = 0; j < arrOneSet.length; j++ )
  3714.             arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);
  3715.         switch( arrOneSet[0] )
  3716.         {
  3717.         case "speed" : this.duration = 100000/arrOneSet[1]; break;
  3718.         }
  3719.     }
  3720.  
  3721.     if( this.ele.style.position != "absolute" )
  3722.         this.ele.style.position = "relative";
  3723.     this.timer = null;
  3724.     this.aniIndex = CEngine.arrAnimation.length;
  3725.     CEngine.arrAnimation[this.aniIndex] = this;
  3726. }
  3727.  
  3728. CAgencySpiral.prototype.PrepareEffect = function()
  3729. {
  3730.     CCSSP.ShowObject(this.ele, !this.bIsIn );
  3731. }
  3732.  
  3733. CAgencySpiral.prototype.UpdateEffect = function()
  3734. {
  3735.     if( this.timer == null )
  3736.         this.ResetParameters();
  3737.  
  3738.     var percent = ((new Date()).getTime() - this.startTime)/this.duration;
  3739.     if( percent >= 1.0 )
  3740.         this.EndEffect();
  3741.     else
  3742.     {
  3743.         var rf = (this.bIsIn)? (1.0 - percent) : percent; 
  3744.         var t = (1.0-rf) * 4.0 * Math.PI
  3745.         var rxP = (this.bIsIn)? this.startX : this.finalX; 
  3746.         var ryP = (this.bIsIn)? this.startY : this.finalY; 
  3747.         var rx = (Math.abs(rxP) < 200) ? Math.abs(rxP) : 200;
  3748.         var ry = (Math.abs(ryP) < 200) ? Math.abs(ryP) : 200;
  3749.  
  3750.         var newX = Math.ceil(-rf*Math.cos(t)*rx) + this.ele.ABSX;
  3751.         var newY = Math.ceil(-rf*Math.sin(t)*ry) + this.ele.ABSY;
  3752.         CCSSP.MoveObjectTo(this.ele, newX, newY);
  3753.         CCSSP.SetTimer(this,20);
  3754.     }
  3755. }
  3756.  
  3757. CAgencySpiral.prototype.EndEffect = function()
  3758. {
  3759.     clearInterval( this.timer );
  3760.     this.timer = null;
  3761.     
  3762.     if( this.bIsIn ) // In
  3763.         CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY);
  3764.     else // Out
  3765.         CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);
  3766.     CCSSP.ShowObject(this.ele, this.bIsIn );
  3767. }
  3768.  
  3769. CAgencySpiral.prototype.ResetParameters = function()
  3770. {
  3771.     this.PrepareEffect();
  3772.     CCSSP.ShowObject(this.ele, true );
  3773.     this.startX = (this.bIsIn)? CCSSP.GetWindowRight() : this.ele.ABSX;
  3774.     this.startY = (this.bIsIn)? CCSSP.GetWindowBottom() : this.ele.ABSY;
  3775.     this.finalX = (this.bIsIn)? this.ele.ABSX : CCSSP.GetWindowRight();
  3776.     this.finalY = (this.bIsIn)? this.ele.ABSY : CCSSP.GetWindowBottom(); 
  3777.     
  3778.     CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);
  3779.     this.startTime = (new Date()).getTime();
  3780. }
  3781. // End of CAgencySpiral
  3782.  
  3783. // Begin of CAgencyElastic
  3784. function CAgencyElastic( element, settings)
  3785. {
  3786.     this.ele = element;
  3787.     this.duration = 1000; // default
  3788.     this.direction = "right";
  3789.  
  3790.     var arrAllSet = settings.split(",");
  3791.     for( var i = 0; i < arrAllSet.length; i ++ )
  3792.     {// to retrieve the setting
  3793.         arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);
  3794.         var arrOneSet = arrAllSet[i].split("=");
  3795.         for( var j = 0; j < arrOneSet.length; j++ )
  3796.             arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);
  3797.         switch( arrOneSet[0] )
  3798.         {
  3799.         case "speed" : this.duration = 100000/arrOneSet[1]; break;
  3800.         case "direction" : this.direction = arrOneSet[1]; break;
  3801.         }
  3802.     }
  3803.         
  3804.     if( this.ele.style.position != "absolute" )
  3805.         this.ele.style.position = "relative";
  3806.     this.timer = null;
  3807.     this.aniIndex = CEngine.arrAnimation.length;
  3808.     CEngine.arrAnimation[this.aniIndex] = this;
  3809. }
  3810.  
  3811. CAgencyElastic.prototype.PrepareEffect = function()
  3812. {
  3813.     CCSSP.ShowObject(this.ele, false );
  3814. }
  3815.  
  3816. CAgencyElastic.prototype.UpdateEffect = function()
  3817. {
  3818.     if( this.timer == null )
  3819.         this.ResetParameters();
  3820.  
  3821.     var percent = ((new Date()).getTime() - this.startTime)/this.duration;
  3822.     if( percent >= 1.0 )
  3823.         this.EndEffect();
  3824.     else
  3825.     {
  3826.         var newX = this.startX;
  3827.         var newY = this.startY;
  3828.         var rf = Math.exp(-percent*3);
  3829.         var t = percent * 1.5 * Math.PI
  3830.         var rx = (Math.abs(this.startX) > Math.abs(this.startY)) ? this.startX : this.startY;
  3831.         switch (this.direction )
  3832.         {
  3833.         case "left":   
  3834.         case "right" : newX = rf*Math.cos(t)*rx + this.ele.ABSX; break;
  3835.         case "up":       
  3836.         case "down" :  newY = rf*Math.cos(t)*rx + this.ele.ABSX; break;
  3837.         }
  3838.         CCSSP.MoveObjectTo(this.ele, newX, newY);
  3839.         CCSSP.SetTimer(this,20);
  3840.     }
  3841. }
  3842.  
  3843. CAgencyElastic.prototype.EndEffect = function()
  3844. {
  3845.     CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY);
  3846.     clearInterval( this.timer );
  3847.     this.timer = null;
  3848. }
  3849.  
  3850. CAgencyElastic.prototype.ResetParameters = function()
  3851. {
  3852.     CCSSP.ShowObject(this.ele, true );
  3853.     this.startX = this.ele.ABSX;
  3854.     this.finalX = this.ele.ABSX;
  3855.     this.startY = this.ele.ABSY;
  3856.     this.finalY = this.ele.ABSY;
  3857.     
  3858.     switch (this.direction)
  3859.     { 
  3860.     case "left":  this.startX = -this.ele.offsetWidth; break;
  3861.     case "right": this.startX = this.ele.offsetWidth;  break;
  3862.     case "up":    this.startY = -this.ele.offsetHeight;break;
  3863.     case "down":  this.startY = this.ele.offsetHeight; break;
  3864.     }
  3865.     CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);
  3866.     this.startTime = (new Date()).getTime();
  3867. }
  3868. // End of CAgencyElastic
  3869.  
  3870. // Begin of CAgencyZoom
  3871. function CAgencyZoom( element, settings, bIsIn)
  3872. {
  3873.     this.ele = element;
  3874.     this.duration = 1000; // default
  3875.     
  3876.     var arrAllSet = settings.split(",");
  3877.     for( var i = 0; i < arrAllSet.length; i ++ )
  3878.     {// to retrieve the setting
  3879.         arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);
  3880.         var arrOneSet = arrAllSet[i].split("=");
  3881.         for( var j = 0; j < arrOneSet.length; j++ )
  3882.             arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);
  3883.         switch( arrOneSet[0] )
  3884.         {
  3885.         case "speed" : this.duration = 100000/arrOneSet[1]; break;
  3886.         }
  3887.     }
  3888.  
  3889.     this.bIsIn = bIsIn;
  3890.     this.timer = null;
  3891.     this.aniIndex = CEngine.arrAnimation.length;
  3892.     CEngine.arrAnimation[this.aniIndex] = this;
  3893. }
  3894.  
  3895. CAgencyZoom.prototype.PrepareEffect = function()
  3896. {
  3897.     CCSSP.ShowObject(this.ele, false);
  3898. }
  3899.  
  3900. CAgencyZoom.prototype.UpdateEffect = function()
  3901. {
  3902.     if( this.timer == null )
  3903.         this.ResetParameters();
  3904.  
  3905.     var percent = ((new Date()).getTime() - this.startTime)/this.duration;
  3906.     if( percent >= 1.0 )
  3907.         this.EndEffect();
  3908.     else
  3909.     {
  3910.         var nFactorIn = Math.ceil(50+50*percent);
  3911.         var nFactorOut = Math.ceil(100+200*(1-percent));
  3912.         var AlterFontsize = ((this.bIsIn)? nFactorIn : nFactorOut) + "%";
  3913.         var AlterFactor = ((this.bIsIn)? nFactorIn : nFactorOut) / 100;
  3914.         
  3915.         this.UpdateEffectAllChildren(this.ele, AlterFontsize, AlterFactor);
  3916.         var arr ;
  3917.         if (this.ele.all)
  3918.             arr = this.ele.all ;
  3919.         else
  3920.             arr = this.ele.getElementsByTagName ('*');
  3921.         for(var index = 0; index < arr.length; index++)
  3922.             this.UpdateEffectAllChildren(arr[index], AlterFontsize, AlterFactor);
  3923.             
  3924.         CCSSP.SetTimer(this,20);
  3925.     }
  3926. }
  3927.  
  3928. CAgencyZoom.prototype.UpdateEffectAllChildren = function(child, FontSize, Factor)
  3929. {
  3930.     if( CCSSP.IsTextTag(child) )
  3931.         child.style.fontSize = FontSize;
  3932.     else
  3933.     {
  3934.         if( typeof(child.orgWidth) == "number" )
  3935.             child.style.width = Factor * child.orgWidth;
  3936.         if( typeof(child.orgHeight) == "number" )
  3937.             child.style.height = Factor * child.orgHeight;
  3938.     }
  3939. }
  3940.  
  3941. CAgencyZoom.prototype.EndEffect = function()
  3942. {
  3943.     this.EndEffectAllChildren(this.ele);
  3944.     var arr ;
  3945.     if(this.ele.all)
  3946.         arr = this.ele.all ;
  3947.     else
  3948.         arr = this.ele.getElementsByTagName('*');
  3949.     for(var index = 0; index < arr.length; index++)
  3950.         this.EndEffectAllChildren(arr[index]);
  3951.     
  3952.     clearInterval( this.timer );
  3953.     this.timer = null;
  3954. }
  3955.  
  3956. CAgencyZoom.prototype.EndEffectAllChildren = function( child )
  3957. {    
  3958.     if( CCSSP.IsTextTag(child) )
  3959.         child.style.fontSize = child.orgFontSize;
  3960.     else
  3961.     {
  3962.         if( typeof(child.intactWidth) != "undefined" )
  3963.         {
  3964.             child.width = child.intactWidth;
  3965.             child.height = child.intactHeight;
  3966.         }
  3967.         else if( typeof(child.style.intactPixelWidth) != "undefined" )
  3968.         {
  3969.             child.style.pixelWidth = child.style.intactPixelWidth;
  3970.             child.style.pixelHeight = child.style.intactPixelHeight;
  3971.         }
  3972.     }
  3973. }
  3974.  
  3975. CAgencyZoom.prototype.ResetParameters = function()
  3976. {
  3977.     this.PrepareEffect();
  3978.     this.ResetParametersAllChildren( this.ele );
  3979.     var arr ;
  3980.     if (this.ele.all)
  3981.         arr = this.ele.all ;
  3982.     else
  3983.         arr = this.ele.getElementsByTagName('*');
  3984.     for(var index = 0; index < arr.length; index++)
  3985.         this.ResetParametersAllChildren(arr[index]);
  3986.         
  3987.     this.startTime = (new Date()).getTime();
  3988. }
  3989.  
  3990. CAgencyZoom.prototype.ResetParametersAllChildren = function( child )
  3991. {
  3992.     CCSSP.ShowObject(child, true );
  3993.     if( (child.tagName == "DIV") && (getParentNode(child).tagName == "TD") )
  3994.         child.width = "100%";// if the div is inside a cell of table, we need the this hack
  3995.     
  3996.     if( CCSSP.IsTextTag(child) )
  3997.         child.orgFontSize = child.style.fontSize;
  3998.     else
  3999.     {
  4000.         if( child.width > "" || child.height > "" )
  4001.         {
  4002.             child.orgWidth = child.intactWidth = child.width;
  4003.             child.orgHeight = child.intactHeight = child.height;
  4004.         }
  4005.         else if( ( typeof(child.orgWidth) != "number" ) && (typeof(child.orgHeight) != "number") )
  4006.         {
  4007.             child.orgWidth = child.style.intactPixelWidth = child.style.pixelWidth;
  4008.             child.orgHeight = child.style.intactPixelHeight = child.style.pixelHeight;
  4009.         }
  4010.     }
  4011. }
  4012. // End of CAgencyZoom
  4013.  
  4014. //// the following effects will use IE's exclusive "filter" function ////
  4015. // Begin of CAgencyAlpha definition
  4016. function CAgencyAlpha( element, settings, bIsIn )
  4017. {// because of "visual filter" style, this won't work in Navigator
  4018.     this.ele = element;
  4019.     this.bIsIn = bIsIn;
  4020.  
  4021.     // to set the default value
  4022.     this.startOpacity = (this.bIsIn) ? 0 : 100;
  4023.     this.endOpacity = (this.bIsIn) ? 100 : 0;
  4024.     
  4025.     this.duration = 1000; // default
  4026.     
  4027.     var arrAllSet = settings.split(",");
  4028.     for( var i = 0; i < arrAllSet.length; i ++ )
  4029.     {// to retrieve the setting
  4030.         arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);
  4031.         var arrOneSet = arrAllSet[i].split("=");
  4032.         for( var j = 0; j < arrOneSet.length; j++ )
  4033.             arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);
  4034.         switch( arrOneSet[0] )
  4035.         {
  4036.         case "speed" : this.duration = 100000/arrOneSet[1]; break;
  4037.         }
  4038.     }
  4039.     
  4040.     this.timer = null;
  4041.     this.aniIndex = CEngine.arrAnimation.length;
  4042.     CEngine.arrAnimation[this.aniIndex] = this;
  4043. }
  4044.  
  4045. CAgencyAlpha.prototype.PrepareEffect = function()
  4046. {// to set the visual filter function
  4047.     // the visual filter ONLY work when set by "Width and Height" or
  4048.     // absolute position for DIV, SPAN and normal tag ( such as p )
  4049.     // but, "absolute" cause the following elements overlap, so:
  4050.     CCSSP.PrepareFilter( this.ele );
  4051.     CCSSP.ShowObject(this.ele, !this.bIsIn );
  4052. }
  4053.  
  4054. CAgencyAlpha.prototype.UpdateEffect = function()
  4055. {// to set the visual filter function
  4056.     if( this.timer == null )
  4057.         this.ResetParameters();
  4058.     if( typeof(this.ele.filters.alpha) != "object" )
  4059.     {
  4060.         this.EndEffect();
  4061.         return;
  4062.     }
  4063.  
  4064.     var percent = ((new Date()).getTime() - this.startTime)/this.duration;
  4065.     if( percent >= 1.0 )
  4066.         this.EndEffect();
  4067.     else if( typeof(this.ele.filters.alpha) == "object" )
  4068.     {
  4069.         this.ele.filters.alpha.opacity = this.startOpacity*(1.0-percent) + this.endOpacity*percent;
  4070.         CCSSP.SetTimer(this,20);
  4071.     }
  4072. }
  4073.  
  4074. CAgencyAlpha.prototype.EndEffect = function()
  4075. {// to remove the visual filter function
  4076.     clearInterval( this.timer );
  4077.     this.timer = null;
  4078.     this.ele.style.filter = "";
  4079.     CCSSP.ShowObject(this.ele, this.bIsIn );
  4080. }
  4081.  
  4082. CAgencyAlpha.prototype.ResetParameters = function()
  4083. {
  4084.     this.PrepareEffect();
  4085.     CCSSP.ShowObject(this.ele, true );
  4086.     this.ele.style.filter = "alpha(opacity=" + this.startOpacity + ")";
  4087.     this.startTime = (new Date()).getTime();
  4088. }
  4089. // End of the CAgencyAlpha definition
  4090.  
  4091. // Begin of CAgencyWave definition
  4092. function CAgencyWave( element, settings )
  4093. {// because of "visual filter" style, this won't work in Navigator
  4094.     this.ele = element;
  4095.  
  4096.     this.duration = 0; // default
  4097.     this.strength = 10;
  4098.     this.freq = 1;
  4099.     this.lightstrength = 1;
  4100.     
  4101.     var arrAllSet = settings.split(",");
  4102.     for( var i = 0; i < arrAllSet.length; i ++ )
  4103.     {// to retrieve the setting
  4104.         arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);
  4105.         var arrOneSet = arrAllSet[i].split("=");
  4106.         for( var j = 0; j < arrOneSet.length; j++ )
  4107.             arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);
  4108.         switch( arrOneSet[0] )
  4109.         {
  4110.         case "duration" : this.duration = 100000/arrOneSet[1]; break;
  4111.         case "strength" : this.strength = arrOneSet[1]; break;
  4112.         case "freq" : this.freq = arrOneSet[1]; break;
  4113.         case "lightstrength" : this.lightstrength = arrOneSet[1]; break;
  4114.         }
  4115.     }
  4116.  
  4117.     this.timer = null;
  4118.     this.aniIndex = CEngine.arrAnimation.length;
  4119.     CEngine.arrAnimation[this.aniIndex] = this;
  4120. }
  4121.  
  4122. CAgencyWave.prototype.PrepareEffect = function()
  4123. {// to set the visual filter function
  4124.     CCSSP.PrepareFilter(this.ele);
  4125.  
  4126.     CCSSP.ShowObject(this.ele, true );
  4127. }
  4128.  
  4129. CAgencyWave.prototype.UpdateEffect = function()
  4130. {// to set the visual filter function
  4131.     if( this.timer == null )
  4132.         this.ResetParameters();
  4133.     if( (typeof(this.ele.filters) == "undefined") || (typeof(this.ele.filters.wave) != "object" ) )
  4134.     {
  4135.         this.EndEffect();
  4136.         return;
  4137.     }
  4138.  
  4139.     if( this.duration > 0 )
  4140.     {
  4141.         var percent = ((new Date()).getTime() - this.startTime)/this.duration;
  4142.         if( percent >= 1.0 )
  4143.         {
  4144.             this.EndEffect();
  4145.             return;
  4146.         }
  4147.     }
  4148.     
  4149.     this.ele.filters.wave.phase += 5;
  4150.     this.ele.filters.wave.phase %= 100;
  4151.     CCSSP.SetTimer(this,50);
  4152. }
  4153.  
  4154. CAgencyWave.prototype.EndEffect = function()
  4155. {// to remove the visual filter function
  4156.     this.ele.style.filter = "";
  4157.     clearInterval( this.timer );
  4158.     this.timer = null;
  4159. }
  4160.  
  4161. CAgencyWave.prototype.ResetParameters = function()
  4162. {
  4163.     this.PrepareEffect();
  4164.     this.ele.style.filter = "wave(strength=" + this.strength + ",freq=" + 
  4165.      this.freq +", lightstrength=" + this.lightstrength +",phase=0);";
  4166.     this.startTime = (new Date()).getTime();
  4167. }
  4168. // End of the CAgencyWave definition
  4169.  
  4170. // Begin of CAgencyGlow definition
  4171. function CAgencyGlow( element, settings )
  4172. {// because of "visual filter" style, this won't work in Navigator
  4173.     this.ele = element;
  4174.  
  4175.     // to set the default value
  4176.     this.glowColor = "green";
  4177.     this.glowStrength = "3";
  4178.     
  4179.     var arrAllSet = settings.split(",");
  4180.     for( var i = 0; i < arrAllSet.length; i ++ )
  4181.     {
  4182.         arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);
  4183.         var arrOneSet = arrAllSet[i].split("=");
  4184.         for( var j = 0; j < arrOneSet.length; j++ )
  4185.             arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);
  4186.         switch( arrOneSet[0] )
  4187.         {
  4188.         case "color" : this.glowColor = arrOneSet[1]; break;
  4189.         case "strength" : this.glowStrength = arrOneSet[1]; break;
  4190.         }
  4191.     }
  4192. }
  4193.  
  4194. CAgencyGlow.prototype.PrepareEffect = function()
  4195. {
  4196.     CCSSP.PrepareFilter(this.ele);
  4197.     CCSSP.ShowObject(this.ele, true );
  4198.     if( this.ele.style.backgroundColor != "" )
  4199.     {//style.backgroundColor somehow stop the visual filter
  4200.         this.ele.intactBackgroundColor = this.ele.style.backgroundColor;
  4201.         this.ele.style.backgroundColor = "";
  4202.     }
  4203. }
  4204.  
  4205. CAgencyGlow.prototype.UpdateEffect = function()
  4206. {// to set the visual filter function
  4207.     this.PrepareEffect();
  4208.     this.ele.style.filter = "glow(Color=" + this.glowColor + ", Strength=" + 
  4209.         this.glowStrength + ", enabled=true" +")";
  4210. }
  4211.  
  4212. CAgencyGlow.prototype.EndEffect = function()
  4213. {// to remove the visual filter function
  4214.     this.ele.style.filter = "";
  4215.     if( typeof(this.ele.intactBackgroundColor) != "undefined" )
  4216.         this.ele.style.backgroundColor = this.ele.intactBackgroundColor;
  4217. }
  4218. // End of the CAgencyGlow definition
  4219.  
  4220. // Begin of CAgencyDropShadow definition
  4221. function CAgencyDropShadow( element, settings )
  4222. {// because of "visual filter" style, this won't work in Navigator
  4223.     this.ele = element;
  4224.  
  4225.     // to set the default value
  4226.     this.shadowColor = "black"; 
  4227.     this.shadowOffx = "1";
  4228.     this.shadowOffy = "1";
  4229.     
  4230.     var arrAllSet = settings.split(",");
  4231.     for( var i = 0; i < arrAllSet.length; i ++ )
  4232.     {
  4233.         arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);
  4234.         var arrOneSet = arrAllSet[i].split("=");
  4235.         for( var j = 0; j < arrOneSet.length; j++ )
  4236.             arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);
  4237.         switch( arrOneSet[0] )
  4238.         {
  4239.         case "color" : this.shadowColor = arrOneSet[1]; break;
  4240.         case "offx" : this.shadowOffx = arrOneSet[1]; break;
  4241.         case "offy" : this.shadowOffy = arrOneSet[1]; break;
  4242.         }
  4243.     }
  4244. }
  4245.  
  4246. CAgencyDropShadow.prototype.PrepareEffect = function()
  4247. {
  4248.     CCSSP.PrepareFilter(this.ele);
  4249.     CCSSP.ShowObject(this.ele, true );
  4250.     
  4251.     if( this.ele.style.backgroundColor != "" )
  4252.     {//style.backgroundColor somehow stop the visual filter
  4253.         this.ele.intactBackgroundColor = this.ele.style.backgroundColor;
  4254.         this.ele.style.backgroundColor = "";
  4255.     }
  4256. }
  4257.  
  4258. CAgencyDropShadow.prototype.UpdateEffect = function()
  4259. {// to set the visual filter function
  4260.     this.PrepareEffect();
  4261.     this.ele.style.filter = "dropshadow(color=" + this.shadowColor + ", offx=" + 
  4262.         this.shadowOffx + ", offy=" + this.shadowOffy + ")";
  4263. }
  4264.  
  4265. CAgencyDropShadow.prototype.EndEffect = function()
  4266. {// to remove the visual filter function
  4267.     this.ele.style.filter = "";
  4268.     if( typeof(this.ele.intactBackgroundColor) != "undefined" )
  4269.         this.ele.style.backgroundColor = this.ele.intactBackgroundColor;
  4270. }
  4271. // End of the CAgencyDropShadow definition
  4272.  
  4273. // Begin of CAgencyRevealTrans definition
  4274. function CAgencyRevealTrans( element, settings )
  4275. {// because of "visual filter" style, this won't work in Navigator
  4276.     this.ele = element;
  4277.  
  4278.     // to set the default value
  4279.     this.duration = 1.0; //The value is specified in seconds.milliseconds format (0.0000).
  4280.     this.transition = 0;
  4281.     
  4282.     var arrAllSet = settings.split(",");
  4283.     for( var i = 0; i < arrAllSet.length; i ++ )
  4284.     {
  4285.         arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);
  4286.         var arrOneSet = arrAllSet[i].split("=");
  4287.         for( var j = 0; j < arrOneSet.length; j++ )
  4288.             arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);
  4289.         switch( arrOneSet[0] )
  4290.         {
  4291.         case "type" : this.transition = arrOneSet[1]; break;
  4292.         case "duration" : this.duration = 100/arrOneSet[1];    break;
  4293.         }
  4294.     }
  4295. }
  4296.  
  4297. CAgencyRevealTrans.prototype.PrepareEffect = function()
  4298. {
  4299.     CCSSP.PrepareFilter(this.ele);
  4300.     CCSSP.ShowObject( this.ele, false);
  4301. }
  4302.  
  4303. CAgencyRevealTrans.prototype.UpdateEffect = function()
  4304. {// to set the visual filter function
  4305.     if( typeof( this.ele.filters.RevealTrans ) == "object" )
  4306.     {
  4307.         if( this.ele.filters.RevealTrans.status == 2 )
  4308.             this.ele.filters.RevealTrans.stop();  
  4309.     }
  4310.  
  4311.     this.PrepareEffect();
  4312.     
  4313.     this.ele.style.filter = "RevealTrans(duration=" + this.duration + 
  4314.         ", transition=" + this.transition + ")";
  4315.     
  4316.     if( typeof( this.ele.filters.RevealTrans ) == "object" )
  4317.     {
  4318.         this.ele.filters.RevealTrans.apply();
  4319.         CCSSP.ShowObject( this.ele, true);
  4320.         this.ele.filters.RevealTrans.play();  
  4321.     }
  4322.     else
  4323.         CCSSP.ShowObject( this.ele, true);
  4324. }
  4325.  
  4326. CAgencyRevealTrans.prototype.EndEffect = function()
  4327. {
  4328.     if( typeof( this.ele.filters.RevealTrans ) == "object" )
  4329.         this.ele.filters.RevealTrans.stop();  
  4330.     this.ele.style.filter = "";
  4331. }
  4332. // End of the CAgencyRevealTrans definition
  4333.  
  4334. // Begin of CAgencyBlur definition
  4335. function CAgencyBlur( element, settings )
  4336. {// because of "visual filter" style, this won't work in Navigator
  4337.     this.ele = element;
  4338.  
  4339.     // to set the default value
  4340.     this.strength = "5";
  4341.     this.direction = "90";
  4342.     
  4343.     var arrAllSet = settings.split(",");
  4344.     for( var i = 0; i < arrAllSet.length; i ++ )
  4345.     {
  4346.         arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);
  4347.         var arrOneSet = arrAllSet[i].split("=");
  4348.         for( var j = 0; j < arrOneSet.length; j++ )
  4349.             arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);
  4350.         switch( arrOneSet[0] )
  4351.         {
  4352.         case "strength" : this.strength = arrOneSet[1]; break;
  4353.         case "direction" : this.direction = arrOneSet[1]; break;
  4354.         }
  4355.     }
  4356. }
  4357.  
  4358. CAgencyBlur.prototype.PrepareEffect = function()
  4359. {
  4360.     CCSSP.PrepareFilter(this.ele);
  4361.     CCSSP.ShowObject(this.ele, true );
  4362. }
  4363.  
  4364. CAgencyBlur.prototype.UpdateEffect = function()
  4365. {// to set the visual filter function
  4366.     CCSSP.PrepareFilter(this.ele);
  4367.     this.ele.style.filter = "blur(strength=" + this.strength + 
  4368.         ", direction=" + this.direction + ")";
  4369. }
  4370.  
  4371. CAgencyBlur.prototype.EndEffect = function()
  4372. {// to remove the visual filter function
  4373.     this.ele.style.filter = "";
  4374. }
  4375. // End of the CAgencyBlur definition
  4376.  
  4377. // Begin of CAgencyChangeFilter definition
  4378. function CAgencyChangeFilter( element, settings ) // flipH, flipV, invert, grey,
  4379. {// because of "visual filter" style, this won't work in Navigator
  4380.     this.ele = element;
  4381.  
  4382.     // to set the default value
  4383.     this.filterFunction = settings;
  4384. }
  4385.  
  4386. CAgencyChangeFilter.prototype.PrepareEffect = function()
  4387. {
  4388.     CCSSP.PrepareFilter(this.ele);
  4389.     CCSSP.ShowObject(this.ele, true );
  4390. }
  4391.  
  4392. CAgencyChangeFilter.prototype.UpdateEffect = function()
  4393. {// to set the visual filter function
  4394.     CCSSP.PrepareFilter(this.ele);
  4395.     this.ele.style.filter = this.filterFunction;
  4396. }
  4397.  
  4398. CAgencyChangeFilter.prototype.EndEffect = function()
  4399. {// to remove the visual filter function
  4400.     this.ele.style.filter = "";
  4401. }
  4402. // End of the CAgencyChangeFilter definition
  4403.  
  4404. // The effects below change the style on the fly, so they won't work in Navigator
  4405.  
  4406. // Begin of CAgencyFontChange definition, 
  4407. function CAgencyFontChange( element, settings )
  4408. {//this class can be replace by CAgencyChangeStyle,provided the "settings" is standard CSS string.
  4409.     this.ele = element;
  4410.     
  4411.     // to retrieve the original font style
  4412.     this.RetrieveOldFont( this.ele );
  4413.     
  4414.     // to set the default font to change
  4415.     this.newfontFamily = this.ele.oldFontFamily;
  4416.     this.newfColor = this.ele.oldColor;
  4417.     this.newtextDecoration = this.ele.oldTextDecoration;
  4418.     this.newfontWeight = this.ele.oldFontWeight;
  4419.     this.newfontStyle = this.ele.oldFontStyle;
  4420.     this.newfontSize = this.ele.oldFontSize;
  4421.     this.newBackgroundColor = this.ele.oldBackgroundColor;
  4422.     
  4423.     var arrAllSet = settings.split(",");
  4424.     for( var i = 0; i < arrAllSet.length; i ++ )
  4425.     {// to retrieve the setting
  4426.         arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);
  4427.         var arrOneSet = arrAllSet[i].split("=");
  4428.         for( var j = 0; j < arrOneSet.length; j++ )
  4429.             arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);
  4430.         switch( arrOneSet[0] )
  4431.         {
  4432.         case "font-family" : this.newfontFamily = arrOneSet[1]; break;
  4433.         case "color" : this.newfColor = arrOneSet[1]; break;
  4434.         case "underline" : this.newtextDecoration = (arrOneSet[1]=="on")? "underline" : "none"; break;
  4435.         case "bold" : this.newfontWeight = (arrOneSet[1]=="on")? "bold" : "normal"; break;
  4436.         case "italic" : this.newfontStyle = (arrOneSet[1]=="on")? "italic" : "normal"; break;
  4437.         case "size" : this.newfontSize = arrOneSet[1]; break;
  4438.         case "background-color" : this.newBackgroundColor = arrOneSet[1]; break;
  4439.         }
  4440.     }
  4441. }
  4442.  
  4443. CAgencyFontChange.prototype.RetrieveOldFont = function(objChild)
  4444. {
  4445.     if( typeof(objChild.oldFontFamily) == "undefined" )
  4446.         objChild.oldFontFamily = objChild.style.fontFamily;
  4447.     if( typeof(objChild.oldColor) == "undefined" )
  4448.         objChild.oldColor = objChild.style.color;
  4449.     if( typeof(objChild.oldTextDecoration) == "undefined" )
  4450.         objChild.oldTextDecoration = objChild.style.textDecoration;
  4451.     if( typeof(objChild.oldFontWeight) == "undefined" )
  4452.         objChild.oldFontWeight = objChild.style.fontWeight;
  4453.     if( typeof(objChild.oldFontStyle) == "undefined" )
  4454.         objChild.oldFontStyle = objChild.style.fontStyle;
  4455.     if( typeof(objChild.oldFontSize) == "undefined" )
  4456.         objChild.oldFontSize = objChild.style.fontSize;
  4457.     if( typeof(objChild.oldBackgroundColor) == "undefined" )
  4458.         objChild.oldBackgroundColor = objChild.style.backgroundColor;
  4459. }
  4460.  
  4461. CAgencyFontChange.prototype.PrepareEffect = function()
  4462. {
  4463.     // as for expanding text, the child is created after the constructor called
  4464.     var arr = this.ele.getElementsByTagName ('*');
  4465.     for(var index = 0; index < arr.length; index++)
  4466.         this.RetrieveOldFont(arr[index]);
  4467.     CCSSP.ShowObject(this.ele, true );
  4468. }
  4469.  
  4470. CAgencyFontChange.prototype.UpdateEffect = function()
  4471. {// to change the font
  4472.     this.PrepareEffect();
  4473.     this.UpdateEffectAllChildren( this.ele );
  4474.     var arr = this.ele.getElementsByTagName ('*');
  4475.     for( var index = 0; index < arr.length; index++)
  4476.         this.UpdateEffectAllChildren(arr[index]);
  4477. }
  4478.  
  4479. CAgencyFontChange.prototype.UpdateEffectAllChildren = function(objChild)
  4480. {
  4481.     objChild.style.fontFamily = this.newfontFamily;
  4482.     objChild.style.color = this.newfColor;
  4483.     objChild.style.textDecoration = this.newtextDecoration;
  4484.     objChild.style.fontWeight = this.newfontWeight;
  4485.     objChild.style.fontStyle = this.newfontStyle;
  4486.     objChild.style.fontSize = this.newfontSize;
  4487.     objChild.style.backgroundColor = this.newBackgroundColor;
  4488. }
  4489.  
  4490. CAgencyFontChange.prototype.EndEffect = function()
  4491. {// to reinstate the original font style
  4492.     this.EndEffectAllChildren( this.ele );
  4493.     var arr = this.ele.getElementsByTagName ('*');
  4494.     for( var index = 0; index < arr.length; index++)
  4495.         this.EndEffectAllChildren(arr[index]);
  4496. }
  4497.  
  4498. CAgencyFontChange.prototype.EndEffectAllChildren = function( objChild )
  4499. {
  4500.     if( typeof(objChild.oldFontFamily) != "undefined" )
  4501.         objChild.style.fontFamily = objChild.oldFontFamily;
  4502.     if( typeof(objChild.oldColor) != "undefined" )
  4503.         objChild.style.color = objChild.oldColor;
  4504.     if( typeof(objChild.oldFontWeight) != "undefined" )
  4505.         objChild.style.fontWeight = objChild.oldFontWeight;
  4506.     if( typeof(objChild.oldFontStyle) != "undefined" )
  4507.         objChild.style.fontStyle = objChild.oldFontStyle;
  4508.     if( typeof(objChild.oldFontSize) != "undefined" )
  4509.         objChild.style.fontSize = objChild.oldFontSize;
  4510.     if( typeof(objChild.oldTextDecoration) != "undefined" )
  4511.         objChild.style.textDecoration = objChild.oldTextDecoration;
  4512.     if( typeof(objChild.oldBackgroundColor) != "undefined" )
  4513.         objChild.style.backgroundColor = objChild.oldBackgroundColor;
  4514. }
  4515. // End of the CAgencyFontChange definition
  4516.  
  4517. // Begin of the CAgencyChangeStyle definition
  4518. function CAgencyChangeStyle( element, settings )
  4519. {//this class can be replace by CAgencyChangeStyle,provided the "settings" is standard CSS string.
  4520.     this.ele = element;
  4521.     
  4522.     // to retrieve the original style
  4523.     this.oldstyle = this.ele.style.cssText;
  4524.     
  4525.     // to set the default style
  4526.     this.newStyle = this.oldstyle;
  4527.     
  4528.     if( typeof(settings) == "string" && settings.length > 1 )
  4529.         this.newStyle = this.oldstyle + " " + settings;
  4530. }
  4531.  
  4532. CAgencyChangeStyle.prototype.PrepareEffect = function()
  4533. {
  4534.     CCSSP.ShowObject(this.ele, true );
  4535. }
  4536.  
  4537. CAgencyChangeStyle.prototype.UpdateEffect = function()
  4538. {// to change the style
  4539.     this.ele.style.cssText = this.newStyle;
  4540. }
  4541.  
  4542. CAgencyChangeStyle.prototype.EndEffect = function()
  4543. {// to reinstate the original style
  4544.     this.ele.style.cssText = this.oldStyle;
  4545. }
  4546. // End of the CAgencyChangeStyle definition
  4547.  
  4548. //End the definition of CAgencyXXXX classes
  4549.  
  4550. //Begin to collaborate with other event handler settings 
  4551. CCSSP.RegisterEventHandler( window, "onload", "CEngine.OnPageLoad(event);BSSCOnLoad(event);InitTriggersInHead(event);");
  4552. CCSSP.RegisterEventHandler( document, "onclick", "CEngine.OnPageClick(event);BSSCOnClick(event);");
  4553. CCSSP.RegisterEventHandler( document, "onmouseover", "CEngine.OnMouseOver(event);BSSCOnMouseOver(event);" );
  4554. CCSSP.RegisterEventHandler( document, "onmouseout", "CEngine.OnMouseOver(event);BSSCOnMouseOut(event);" );
  4555. CCSSP.RegisterEventHandler( window, "onunload", "BSSCOnUnload();");
  4556. //End to collaborate with other event handler settings
  4557.  
  4558. /// Section End  - CCSSP DHTM 2 (JavaScript 1.2)
  4559.  
  4560. //// Segment End -- (JavaScript 1.2)
  4561.